У меня есть довольно простой метод контроллера, который возвращает список клиентов. Я хочу, чтобы он возвращал представление списка, когда пользователь просматривает его, и возвращает JSON для запросов с application/json
в заголовке Accept.
Возможно ли это в 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 по умолчанию, даже если это не в списке Accept. Если я ударил "/клиентов" в своем браузере, я получаю вывод JSON, а не мой взгляд.
Мне казалось, что мне нужно написать OutputFormatter, который обрабатывал text/html
, но я не могу понять, как я могу вызвать метод View()
из OutputFormatter
, так как эти методы находятся на Controller
, и Мне нужно было бы узнать имя View, которое я хотел бы сделать.
Есть ли способ или свойство, которое я могу вызвать, чтобы проверить, сможет ли 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 }));
}
}