2

此 OData 函数不会反序列化主体中的模型参数。null从响应中可以看出,它会反序列化。OData V4 中是否支持 FromBody 参数?

ConfigV1.cs

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

测试控制器.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;
    }
}

测试模型.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"
}

回复

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

2 回答 2

2

在 V4 中我们在控制器方法中使用 ODataActionParameter,您可以参考此页面获取详细信息,并且还有更多 V4 功能。

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

于 2016-11-02T08:01:28.230 回答
1

OData 函数应使用 HTTP GET 调用,并且不应影响服务器。您在这里的方法CreateTestModel听起来会影响服务器,所以我会说它可能更适合 OData 操作。这似乎无关紧要,但我认为它实际上也可以解决您的问题,因为操作被设置为在正文中包含参数,而函数通常从 URL 获取参数

于 2016-11-02T11:18:42.127 回答