2016-11-01 1 views
0

Эта функция OData не десериализует параметр модели из тела. Он десериализуется как null, как видно из ответа. Есть ли поддержка параметров FromBody в OData V4?Функция OData V4 FromBody параметр

ConfigV1.cs

builder.Function("CreateTestModel").Returns<TestModel>(); 
var edmModel = builder.GetEdmModel() 
config.MapODataServiceRoute("ODataRouteV1", "v1", edmModel); 

TestController.cs

using System; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using System.Web.OData; 
using System.Web.OData.Query; 
using System.Web.OData.Routing; 

public class TestController : ODataController 
    [HttpPost] 
    [ODataRoute("CreateTestModel")] 
    public TestModel CreateTestModel([FromBody]TestModel model) 
    { 
     return model; 
    } 
} 

TestModel.cs

public class TestModel 
{ 
    public string Value { get; set; } 
} 

Запрос

POST /v1/CreateTestModel HTTP/1.1 
Host: localhost:8090 
Content-Type: application/json 
Cache-Control: no-cache 
Postman-Token: 4810cdc0-d92b-b7b5-4328-8b87e0222854 

{ 
    "Value": "test" 
} 

Response

{ 
    "@odata.context":"http://localhost:8090/V1/$metadata#Edm.Null","@odata.null":true 
} 

ответ

1

Функции OData должна вызываться с HTTP GET и не должны влиять на сервер. Ваш метод здесь CreateTestModel звучит так, как будто это повлияет на сервер, поэтому я бы сказал, что он, вероятно, больше подходит для действия OData. Это может показаться, что это не актуально, но я думаю, что он действительно исправит вашу проблему, а потому, что действия настроены на наличие параметров в теле, тогда как функции обычно получают параметры с URL-адреса

1

В V4 мы используем ODataActionParameter в методе контроллера, вы можете обратиться к этой странице, чтобы получить подробную информацию, и есть больше возможностей V4.

http://odata.github.io/WebApi/#04-07-action-parameter-support

 Смежные вопросы

  • Нет связанных вопросов^_^