媒體類型,也稱為 MIME 類型,標(biāo)識(shí)一段數(shù)據(jù)的格式。在 HTTP 中,媒體類型描述了消息正文的格式。媒體類型由兩個(gè)字符串組成:類型和子類型。例如 –
- text/htmlimage/pngapplication/json當(dāng) HTTP 消息包含實(shí)體主體時(shí),Content-Type 標(biāo)頭指定消息主體的格式。這告訴接收者如何解析消息體的內(nèi)容。
當(dāng)客戶端發(fā)送請求消息時(shí),可以包含 Accept 標(biāo)頭。 Accept 標(biāo)頭告訴服務(wù)器客戶端希望從服務(wù)器獲得哪種媒體類型。
接受:text/html,application/xhtml+xml,application/xml p>
媒體類型決定 Web API 如何序列化和反序列化 HTTP 消息正文。 Web API 內(nèi)置了對 XML、JSON、BSON 和 formurlencoded 數(shù)據(jù)的支持,您可以通過編寫媒體格式化程序來支持其他媒體類型。
MediaTypeFormatter 是一個(gè)抽象類,JsonMediaTypeFormatter 和 XmlMediaTypeFormatter 類繼承自該抽象類從。 JsonMediaTypeFormatter 處理 JSON,XmlMediaTypeFormatter 處理 XML。媒體類型在 WebApiConfig 類的 Register 方法中指定。讓我們看一些可以使用媒體類型的示例。
學(xué)生控制器
示例
using DemoWebApplication.Models; using DemoWebApplication.Models; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class StudentController : ApiController{ List <Student> students = new List <Student>{ new Student{ Id = 1, Name = "Mark" }, new Student{ Id = 2, Name = "John" } }; public IEnumerable <Student> Get(){ return students; } } }
登錄后復(fù)制
僅從 ASP.NET Web API 服務(wù)返回 JSON 的示例,無論
Accept 標(biāo)頭值 –
public static class WebApiConfig{ public static void Register(HttpConfiguration config){ config.MapHttpAttributeRoutes(); config.Formatters.Remove(config.Formatters.XmlFormatter); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
登錄后復(fù)制
使用上面的代碼,我們刪除了 XmlFormatter,它強(qiáng)制 ASP.NET Web API 始終返回 JSON,無論客戶端請求中的 Accept 標(biāo)頭值如何。當(dāng)您希望服務(wù)僅支持 JSON 而不是 XML 時(shí),請使用此技術(shù)。
從上面的輸出中我們可以看到,無論 Accept 標(biāo)頭值 application/xml 是什么,Web API 服務(wù)始終會(huì)返回 JSON。
從 ASP.NET Web API 服務(wù)僅返回 XML 的示例,無論
Accept 標(biāo)頭值 –
public static class WebApiConfig{ public static void Register(HttpConfiguration config){ config.MapHttpAttributeRoutes(); config.Formatters.Remove(config.Formatters.JsonFormatter); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
登錄后復(fù)制
從上面的輸出中我們可以看到,無論 Accept 標(biāo)頭值 application/json 是什么,Web API 服務(wù)都返回 XML。
在以下情況下從 ASP.NET Web API 服務(wù)返回 JSON 而不是 XML 的示例
瀏覽器發(fā)出請求 –
當(dāng)瀏覽器向我們的 StudentController 發(fā)出請求時(shí),響應(yīng)將采用 XML 格式。這是因?yàn)闉g覽器默認(rèn)以 text/html 形式發(fā)送接受標(biāo)頭。
現(xiàn)在讓我們看看當(dāng)從瀏覽器發(fā)出請求時(shí)如何發(fā)送 JSON 響應(yīng)而不是 XML。
public static class WebApiConfig{ public static void Register(HttpConfiguration config){ config.MapHttpAttributeRoutes(); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
登錄后復(fù)制
下面的輸出顯示,當(dāng)從瀏覽器觸發(fā)請求時(shí),無論接受標(biāo)頭文本/html如何,響應(yīng)都是 JSON 類型。
“>
以上就是我們?nèi)绾卧?Asp.Net WebAPI C# 中指定 MIME 類型?的詳細(xì)內(nèi)容,更多請關(guān)注www.xfxf.net其它相關(guān)文章!