【发布时间】:2016-10-28 08:00:42
【问题描述】:
我有一个非常基本的控制器方法,它返回一个客户列表。我希望它在用户浏览它时返回列表视图,并将 JSON 返回到 Accept 标头中具有 application/json 的请求。
这在 ASP.NET Core MVC 1.0 中可行吗?
我试过这个:
[HttpGet("")]
public async Task<IActionResult> List(int page = 1, int count = 20)
{
var customers = await _customerService.GetCustomers(page, count);
return Ok(customers.Select(c => new { c.Id, c.Name }));
}
但默认情况下会返回 JSON,即使它不在接受列表中。如果我在浏览器中点击“/customers”,我会得到 JSON 输出,而不是我的视图。
我想我可能需要编写一个处理text/html 的OutputFormatter,但我不知道如何从OutputFormatter 调用View() 方法,因为这些方法在Controller 上,并且我需要知道要渲染的视图的名称。
是否有我可以调用的方法或属性来检查 MVC 是否能够找到要呈现的 OutputFormatter?类似于以下内容:
[HttpGet("")]
public async Task<IActionResult> List(int page = 1, int count = 20)
{
var customers = await _customerService.GetCustomers(page, count);
if(Response.WillUseContentNegotiation)
{
return Ok(customers.Select(c => new { c.Id, c.Name }));
}
else
{
return View(customers.Select(c => new { c.Id, c.Name }));
}
}
【问题讨论】:
-
简而言之,是的,它可能在核心中,就像在普通 MVC 中一样。关于你的输出格式化程序,你能扩展一下吗
-
@SimonPrice 我在问题中添加了更多内容
标签: c# asp.net-mvc asp.net-core