【发布时间】:2013-01-30 14:48:24
【问题描述】:
尝试使用 OData webAPI 并使用参数调用操作,将其序列化为没有元信息的 json。 所以,我想传递一个类型的对象:
public class SomeRequest
{
public RequestReason Reason { get; set; }
}
public enum RequestReason
{
New,
Dublicate
}
我已经创建了一个 mdel,配置了一个动作:
var action = modelBuilder.Entity<Member>().Action("SomeRequest");
action.Parameter<SomeRequest>("Info");
action.Returns<HttpResponseMessage>();
var model = modelBuilder.GetEdmModel();
configuration.EnableOData(model);
在控制器中有代码:
[HttpPost]
public HttpResponseMessage RequestIDCard(int key, [FromBody]ODataActionParameters param)
{
object value;
param.TryGetValue("Info", out value);
///!!!!
}
并期望具有真实类型 SomeRequest 的值,转换类型并处理它... 然后我发出一个带有标题的 POST 请求
内容类型:application/json;json=light; charset=utf-8 接受: 应用程序/json;odata=light
和身体
{“信息”:{“原因”:1}}
但是我得到了“Newtonsoft.Json.Linq.JObject”类型的对象,并且确定它不能被投射! 但是,如果我将对象类型更改为 int,一切正常 :) 是 WebAPI OData 的错误还是我做错了什么?
【问题讨论】:
-
请注意:您的内容类型和接受标头的“odata=light”部分来自新 JSON 规范的预发布版本,此后已被删除。相反,只使用“application/json”或“application/json;odata=minimalmetadata”
-
同样的结果。我使用来自 Nuget 的所有库的最新版本,System.Web.Http.OData v0.3.0.0
标签: .net web-services asp.net-web-api odata