Dot-Net
ASP.NET Web API 可以在與 MVC 相同的 url 上工作嗎?
對於返回 HTML 的 ASP.NET MVC 請求和返回 JSON 的 ASP.NET Web API,我可以使用相同的 url 嗎?
我在這樣的範例路由中看到:
"api/{id}"但是我可以擺脫這api/部分並在 MVC(不是 Web API)中使用這個地址嗎?一方面,這應該是可能的,因為我們有內容協商。但是這樣我需要兩條具有相同地址的路由,所以這沒有意義,對吧?
換句話說:我可以擁有相同
Controller的ApiController網址嗎?還是我ApiController也應該使用 HTML?
如上一個答案所述,您不能做這樣的事情,我真的不明白您為什麼要這樣做。
但我不同意你應該在一個項目中堅持一件事,如果你想要一個乾淨的 API,那麼我會選擇 webapi 並使用 MVC 來託管我的頁面,那時我會將 API 放在一個單獨的文件夾加上單獨的路線。
我可能在這裡扮演魔鬼代言人,但我可以理解為什麼有人會想要做這樣的事情。
通常在同一個 URL 上有一個 API 的 HTML 表示是很好的。這種方法允許使用者在瀏覽器中點擊並探索 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(我也嘗試過);)