从Web API调用MVC控制器方法是ASP.NET框架中常见的需求,涉及两种不同的框架组件交互:
在Web API中通过HttpClient直接调用MVC控制器的URL:
public async Task<IActionResult> GetFromMvc()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://yourdomain.com/");
var response = await client.GetAsync("mvccontroller/action");
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
return Ok(content);
}
return BadRequest();
}
}
在同一应用程序中,可以直接实例化MVC控制器并调用其方法:
public IActionResult CallMvcAction()
{
var mvcController = new MvcController();
return mvcController.TargetAction();
}
如果MVC控制器中的逻辑可以抽象为服务:
// 将MVC控制器中的逻辑提取到服务
public class MyService
{
public string GetData()
{
return "Data from service";
}
}
// 在MVC控制器中使用
public class MvcController : Controller
{
private readonly MyService _service;
public MvcController(MyService service)
{
_service = service;
}
public IActionResult Index()
{
return View(_service.GetData());
}
}
// 在Web API中使用相同服务
[ApiController]
[Route("api/[controller]")]
public class MyApiController : ControllerBase
{
private readonly MyService _service;
public MyApiController(MyService service)
{
_service = service;
}
[HttpGet]
public IActionResult Get()
{
return Ok(_service.GetData());
}
}
优势:
劣势:
问题1:跨控制器调用时上下文丢失
问题2:循环依赖
问题3:性能问题
没有搜到相关的文章