Я, возможно, играю здесь адвоката дьяволов, но я понимаю, почему кто-то захочет сделать что-то подобное.
Часто приятно иметь HTML-представление API на том же URL-адресе. Этот подход позволяет пользователям переключаться между приложениями и изучать API из браузера.
Я справился с этим в WebAPI, используя специальный обработчик сообщений, который 302 перенаправляет на маршрут MVC.
public class HtmlMessageHandler : DelegatingHandler
{
private List<string> contentTypes = new List<string> { "text/html", "application/html", "application/xhtml+xml" };
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Method == HttpMethod.Get && request.Headers.Accept.Any(h => contentTypes.Contains(h.ToString())))
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Redirect);
var htmlUri = new Uri(String.Format("{0}/html",request.RequestUri.AbsoluteUri));
response.Headers.Location = htmlUri;
return Task.Factory.StartNew<HttpResponseMessage>(()=> response);
}
else
{
return base.SendAsync(request, cancellationToken);
}
}
}
Может быть, немного хак, но это делает работу, и мне лично она нравится больше, чем собственный HTML MediaTypeFormatter (который я тоже пробовал);)