OData V4 函数 FromBody 参数
OData V4 function FromBody parameter
此 OData 函数不会反序列化正文中的模型参数。从响应中可以看出,它反序列化为 null
。 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"
}
回应
{
"@odata.context":"http://localhost:8090/V1/$metadata#Edm.Null","@odata.null":true
}
在V4中我们在controller方法中使用了ODataActionParameter,您可以参考这个页面获取详细信息,V4的特性更多。
http://odata.github.io/WebApi/#04-07-action-parameter-support
OData 函数应该使用 HTTP GET 调用并且不应影响服务器。您在此处 CreateTestModel
的方法听起来会影响服务器,因此我认为它可能更适合 OData 操作。这看起来似乎无关紧要,但我认为它实际上也会解决您的问题,因为 Actions 设置为在正文中包含参数,而 Functions 通常从 URL
获取参数
此 OData 函数不会反序列化正文中的模型参数。从响应中可以看出,它反序列化为 null
。 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"
}
回应
{
"@odata.context":"http://localhost:8090/V1/$metadata#Edm.Null","@odata.null":true
}
在V4中我们在controller方法中使用了ODataActionParameter,您可以参考这个页面获取详细信息,V4的特性更多。
http://odata.github.io/WebApi/#04-07-action-parameter-support
OData 函数应该使用 HTTP GET 调用并且不应影响服务器。您在此处 CreateTestModel
的方法听起来会影响服务器,因此我认为它可能更适合 OData 操作。这看起来似乎无关紧要,但我认为它实际上也会解决您的问题,因为 Actions 设置为在正文中包含参数,而 Functions 通常从 URL