日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Web API MediaTypeFormatter

發(fā)布時(shí)間:2025/6/15 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Web API MediaTypeFormatter 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MediaTypeFormatter提供了HTTP Request body data與.Net類型之間的無縫轉(zhuǎn)換。

什么是MediaType

Media Type指的是HTTP header中的content-type,它定義了在HTTP Body中的數(shù)據(jù)的格式。Media Type也用于Http RequestHeader中的Accept頭,表明改Request期望收到的Response的body的格式。

你可以使用標(biāo)準(zhǔn)的media type,比如application/json, application/xml。你也可以定義自己的media type.

什么是MediaTypeFormatter

MediaTypeFormatter用于在Http Body和.Net之間進(jìn)行轉(zhuǎn)換。

所有的MediaTypeFormatter都繼承自抽象類MediaTypeFormatter

public abstract class MediaTypeFormatter {
// propertiespublic Collection<MediaTypeHeaderValue> SupportedMediaTypes { get; private set; }public Collection<Encoding> SupportedEncodings { get; private set; }public Collection<MediaTypeMapping> MediaTypeMappings { get; private set; }// methodspublic virtual Task<object> ReadFromStreamAsync(Type type, Stream stream, HttpContentHeaders contentHeaders, IFormatterLogger formatterLogger){// to be overriden by base class }public virtual Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext transportContext){// to be overriden by base class }public abstract bool CanReadType(Type type);public abstract bool CanWriteType(Type type); }

要定義自己的MediaTypeFormatter,只需要實(shí)現(xiàn)上述抽象類即可。

這里有詳細(xì)的例子

http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters

怎么使用自定義的formatter

要把一個(gè)media type formatter加入Web API Pipeline,

public static void ConfigureApis(HttpConfiguration config) {config.Formatters.Add(new ProductCsvFormatter()); }

什么時(shí)候Web API Framework會(huì)用到MediaTypeFormatter

我們前面說過,media type主要用于HTTP Request/Response header中的content-type,和HTTP Request header中的Accept。

HTTP Request/Response header中的content-type

當(dāng)Web API接收到HTTP Request請(qǐng)求,并且需要讀取body信息時(shí)(比如,使用FromBody屬性),Web API會(huì)檢查content-type的類型,然后使用已注冊(cè)的formatter去deserialize。

HTTP Request header中的Accept

假設(shè)我們有一個(gè)Product類

[DataContract(Name = "Product", Namespace = "http://www.azure.com")]public class Product{[DataMember]public int Id { get; set; }[DataMember]public string Name { get; set; }[DataMember]public string Category { get; set; }[DataMember]public decimal Price { get; set; }}

以及一個(gè)Web API的controller

public HttpResponseMessage Get() {var product = new Product() { Id = 1, Name = "Gizmo", Category = "Widgets", Price = 1.99M };return Request.CreateResponse(HttpStatusCode.OK, product); }

這個(gè)controller返回一個(gè)HttpResponseMessage對(duì)象,里面包含一個(gè)product。

此時(shí),Web API會(huì)檢查該Request的Header中Accept的內(nèi)容,然后調(diào)用相應(yīng)的formatter去序列號(hào)product對(duì)象。

我們可以使用fiddler發(fā)送以下request

User-Agent: Fiddler Host: localhost:9664 Accept: application/xml

那么我們得到的response是

HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Type: application/xml; charset=utf-8 Expires: -1 Server: Microsoft-IIS/8.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Sat, 18 Oct 2014 08:35:21 GMT Content-Length: 187<Product xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.azure.com"><Category>Widgets</Category><Id>1</Id><Name>Gizmo</Name><Price>1.99</Price></Product>

注意Content-Type,以及body的格式。

如果我們發(fā)送以下request

User-Agent: Fiddler Host: localhost:9664 Accept: application/json

?

我們得到的response是

HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Type: application/json; charset=utf-8 Expires: -1 Server: Microsoft-IIS/8.0 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?YzpcdXNlcnNcZWR3YW5nXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTNcUHJvamVjdHNcV2ViQXBwVGVzdFxXZWJBcHBUZXN0XGFwaVx2YWx1ZXM=?= X-Powered-By: ASP.NET Date: Sat, 18 Oct 2014 09:22:45 GMT Content-Length: 57{"Id":1,"Name":"Gizmo","Category":"Widgets","Price":1.99}

?

Web API使用XmlMediaTypeFormatter處理xml media type。XmlMediaTypeFormatter默認(rèn)使用DataContractSerializer進(jìn)行序列化。

使用JsonMediaTypeFormatter處理json media type。JsonMediaTypeFormatter默認(rèn)使用Json.net進(jìn)行序列化。

?

轉(zhuǎn)載于:https://www.cnblogs.com/wangguangxin/p/4033384.html

總結(jié)

以上是生活随笔為你收集整理的ASP.NET Web API MediaTypeFormatter的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天堂在线观看 | 金瓶狂野欧美性猛交xxxx | 午夜视频在线看 | 久久色婷婷 | 成人区一区二区 | 少妇献身老头系列 | 自拍偷拍激情小说 | 无码人妻精品丰满熟人区 | 亲嘴扒胸摸屁股免费视频日本网站 | 欧洲激情网 | 欧美一区亚洲二区 | 国产无套丰满白嫩对白 | 三级网站国产 | 三度诱惑免费版电影在线观看 | 国产午夜片| 毛片内射| 久久久久爱 | 红桃视频国产精品 | 欧美亚洲国产成人 | 免费在线黄网站 | 中文字幕av有码 | 91 在线观看 | 天堂视频免费在线观看 | 最新天堂中文在线 | 97狠狠干| 好爽…又高潮了毛片免费看 | 欧美成人乱码一二三四区免费 | 天天干天天爱天天操 | 久久人精品 | 丰满人妻一区二区三区四区53 | 日韩女优中文字幕 | 日日噜噜夜夜狠狠久久丁香五月 | 无遮挡又爽又刺激的视频 | 人人九九精品 | 久久久久久久久久久久电影 | 五月综合激情 | 俄罗斯色片 | 中国黄色一级毛片 | 日韩作爱视频 | 免费一级全黄少妇性色生活片 | 午夜一级大片 | 欧美成人做爰大片免费看黄石 | 青青草国产在线视频 | 国产高清视频在线免费观看 | 精品国产91 | 成人免费性生活视频 | 在线超碰 | 中文字幕精品在线视频 | 91在线免费看 | 亚洲免费一二三区 | 白嫩日本少妇做爰 | 中文字幕一区av | 亚洲一二三四五 | 欧美四区 | 奇米影视久久 | 久草热在线观看 | 亚洲精品男人的天堂 | 中文av在线播放 | www.av在线| 岛国av一区二区三区 | 国产一区精品视频 | 日日夜夜网 | 日韩亚洲欧美在线观看 | 成人福利视频网 | 国产麻豆一区二区三区在线观看 | 欧美xxxx非洲| 欧美第一夜 | 国产成人av免费看 | 中国极品少妇xxxx | 永久免费国产 | 天天操夜夜操视频 | 伊人国产视频 | 久久精品视频国产 | 人人综合网 | 日韩欧美成人一区二区三区 | 全毛片| 黑丝啪啪 | 欧美aaaaaa| 久久久国产亚洲 | 无码黑人精品一区二区 | 毛片av在线 | a级黄色片| 亚洲精品尤物 | 对白刺激国产子与伦 | 亚洲精品久久久久久久久久 | 亚洲精品久久久久久国 | 91人人草 | 欧美天天性影院 | 亚洲成年人网 | 久久久久久国产精品三级玉女聊斋 | 精品人妻一区二区免费 | 福利资源在线观看 | 天堂网在线观看视频 | 雪白的扔子视频大全在线观看 | 国产内射一区 | 久久亚洲精品国产精品黑人v | 日本变态折磨凌虐bdsm在线 | 人人看人人澡 | 毛片内射久久久一区 |