2013-04-21 122 views
2

我在ASP.NET Web Api中遇到以下問題。讓說,我有以下的代碼我ApiController在ASP.NET Web API中自定義綁定

public void Post(Person person) 
{ 
    // Handle the argument 
} 

我想要做的就是接受以下JSON請求:

{ 
    "person": { 
     "name": "John Doe", 
     "age": 27 
    } 
} 

我想繞過去爲每個模型創建一些持握物體只是爲了正確綁定傳入的數據。在之前的MVC版本中,可以定義像Prefix這樣的東西來解決這個問題。

回答

2

讓我報告,我已經能夠解決這個實施CustomJsonMediaTypeFormatter:在GlobalConfiguration

public class EmberJsonMediaTypeFormatter : JsonMediaTypeFormatter 
{ 
    public override System.Threading.Tasks.Task<object> ReadFromStreamAsync(
     Type type, 
     System.IO.Stream readStream, 
     System.Net.Http.HttpContent content, 
     IFormatterLogger formatterLogger) 
    { 
     return base.ReadFromStreamAsync(
      typeof(JObject), 
      readStream, 
      content, 
      formatterLogger).ContinueWith<object>((task) => 
     { 
      var data = task.Result as JObject; 
      var prefix= type.Name.ToLower(); 

      if (data[prefix] == null) 
      { 
       return GetDefaultValueForType(type); 
      } 

      var serializer = JsonSerializer.Create(SerializerSettings); 

      return data[prefix].ToObject(type, serializer); 
     }); 
    } 
} 

和更換默認JsonMediaTypeFormatter

+0

我以類似的方式做了一次(https://gist.github.com/MilkyWayJoe/4422478),但恢復使用[WebAPIAdapter](https://github.com/MilkyWayJoe/Ember-Contact -Management-WebAPI/blob/master/Ember-Contact-Management-WebAPI/Scripts/app/webapi_adapter.js)&[Serializer](https://github.com/MilkyWayJoe/Ember-Contact-Management-WebAPI/blob/主/灰燼-聯繫人管理-的WebAPI /腳本/應用/ webapi_serializer.js)。他們需要一些工作,但使其變得更容易,因爲我不需要以任何方式更改後端API。 – MilkyWayJoe 2013-04-22 14:18:13

+0

是的,這取決於你想要(甚至可以)彎曲的一面。 – Myslik 2013-04-22 15:59:51

相關問題