2013-04-21 88 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

相关问题