mi può giocare diavolo difensore qui, ma posso vedere il punto perché qualcuno vorrebbe fare qualcosa di simile.
Spesso è bello avere una rappresentazione HTML di un'API sullo stesso URL. Questo approccio consente agli utenti di fare clic intorno ed esplorare un'API all'interno del browser.
Ho ottenuto questo problema in WebAPI utilizzando un gestore di messaggi personalizzato che reindirizza 302 a una route 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);
}
}
}
po 'di hack forse, ma fa il lavoro e io personalmente piace più di un costume HTML MediaTypeFormatter (che ho anche provato);)
fonte
2012-03-30 15:46:23
esattamente, tenerli è progetti separati – RickAndMSFT
@ Rick.Anderson-at-Microsoft.com, non dico che si dovrebbe tenerli in progetti separati, che dipende dalla dimensione della API e del sito. Se si tratta di una piccola applicazione, penso che sia possibile avere sia l'API che il sito nello stesso progetto e semplicemente separarli avendo l'API in un'area se è possibile. –