麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

WebAPI接收J(rèn)SON參數(shù)注意事項

2019-11-14 14:15:03
字體:
供稿:網(wǎng)友

運行環(huán)境:asp.net 4.5.2。

當(dāng)我們向GlobalConfiguration.Configuration.MessageHandlers添加一個DelegatingHandler派生類后,很容易發(fā)生即使命中了Action,但方法參數(shù)值為null的問題。

在大多數(shù)情況下,我們會在DelegatingHandler派生類里,重寫async Task<HttPResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)方法。

在方法內(nèi),做一些事情,比如說訪問日志記錄,任意校驗,添加Header,修改URL(重寫)等工作。

其中最重要需要注意的一點在于request.Content,當(dāng)我們在方法內(nèi)訪問了request.Content (get)之后,而不對request.Content進行賦值(set)的話,會發(fā)生什么呢?

這會導(dǎo)致我們的方法(action)無法獲取到客戶端Post上來的數(shù)據(jù),導(dǎo)致方法參數(shù)值為null。

這是為什么呢,這個中原因,我沒去深究。

現(xiàn)在附上解決代碼:

 1 public class DefaultHandler : DelegatingHandler 2 { 3     protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 4     { 5         request.RequestUri = new Uri(request.RequestUri.ToString()); 6  7         MediaTypeHeaderValue contentType = request.Content.Headers.ContentType; 8  9         if (contentType != null)10         {11             switch (contentType.MediaType)12             {13                 case "application/x-www-form-urlencoded":14                     {15                         NameValueCollection formData = await request.Content.ReadAsFormDataAsync(cancellationToken);16                         request.Content = new FormUrlEncodedContent(Correct(formData));17                         //TODO:在這里對formData進行業(yè)務(wù)處理18                     }19                     break;20                 case "multipart/form-data":21                     {22                         NameValueCollection formData = await request.Content.ReadAsFormDataAsync(cancellationToken);23                         request.Content = new FormUrlEncodedContent(Correct(formData));24                         //TODO:在這里對formData進行業(yè)務(wù)處理25                     }26                     break;27                 case "application/json":28                     {29                         HttpContentHeaders oldHeaders = request.Content.Headers;30                         string formData = await request.Content.ReadAsStringAsync();31                         request.Content = new StringContent(formData);32                         ReplaceHeaders(request.Content.Headers, oldHeaders);33                         //TODO:在這里對formData進行業(yè)務(wù)處理34                     }35                     break;36                 default:37                     throw new Exception("Implement It!");38             }39         }40 41         return await base.SendAsync(request, cancellationToken);42     }43 44     private static IEnumerable<KeyValuePair<string, string>> Correct(NameValueCollection formData)45     {46         return formData.Keys.Cast<string>().Select(key => new KeyValuePair<string, string>(key, formData[key])).ToList();47     }48 49     private static void ReplaceHeaders(HttpHeaders currentHeaders, HttpHeaders oldHeaders)50     {51         currentHeaders.Clear();52         foreach (var item in oldHeaders)53             currentHeaders.Add(item.Key, item.Value);54     }55 }

 

在Global.asax添加代碼:

1 protected void Application_Start()2 {3     GlobalConfiguration.Configure(WebApiConfig.Register);4     GlobalConfiguration.Configuration.MessageHandlers.Add(new DefaultHandler());5 }

模型類:

 1 public class TestModel 2 { 3     [JsonProperty(PropertyName ="I")] 4     public long Id { get; set; } 5  6     [JsonProperty(PropertyName = "N")] 7     public string Name { get; set; } 8  9     [JsonProperty(PropertyName = "M")]10     public decimal Money { get; set; }11 12     [JsonProperty(PropertyName = "IE")]13     public bool IsEnable { get; set; }14 15     [JsonProperty(PropertyName = "CD")]16     public DateTime CreateDate { get; set; }17 18     [JsonProperty(PropertyName = "UD")]19     public DateTime? UpdateDate { get; set; }20 }

ApiController:

1 public class DefaultController : ApiController2 {3     [HttpPost]4     public TestModel Find(TestModel model)5     {6         return model;7     }8 }

Request Body:

{"I":10000,"N":"TestModel","M":21547855.0001,"IE":true,"CD":"2015-12-10 12:12:12","UD":"2016-01-01 01:01:01"}

Fiddler4測試:

測試結(jié)果:

解決辦法來自:http://stackoverflow.com/questions/27333419/modify-request-content-in-webapi-delegatinghandler


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 91精品久久久久久久久久久 | 日韩三级伦理在线观看 | 亚洲性综合网 | 亚洲片在线观看 | 99re热精品视频| 国产69精品福利视频 | 精品久久久久久综合日本 | av成人在线免费观看 | 日本aaaa片毛片免费观看视频 | 91精品成人福利在线播放 | 成人午夜在线免费观看 | 202z中文字幕第一页 | 欧美日韩在线影院 | 一级片a | 日韩一级网站 | 一级在线 | 国产精品一区二区三区99 | 视频一区二区三区在线播放 | 国产精品欧美久久久久一区二区 | 美女色影院 | 国产手机国产手机在线 | 亚洲国产精品500在线观看 | 亚州视频在线 | av在线影片| 黄色大片在线观看 | 国产一区二区影视 | 精品久久久久久久久久久久久 | 色97色| 久久综合福利 | 亚洲精品午夜在线 | 九色com | 国产在线观看一区二区三区 | 亚州综合 | 国产午夜精品久久久久久免费视 | v片在线看 | 欧美a级一区二区 | 黄色免费入口 | 91色成人| 99riav视频一区二区 | 免费久久久久 | 亚洲精品午夜在线 |