gpt4 book ai didi

.net - OData Web API 操作参数反序列化

转载 作者:行者123 更新时间:2023-12-02 05:02:40 27 4
gpt4 key购买 nike

尝试使用 OData webAPI 并调用带有参数的操作,在没有元信息的情况下序列化为 json。所以,我想传递一个类型的对象:

public class SomeRequest
{
public RequestReason Reason { get; set; }
}

public enum RequestReason
{
New,
Dublicate
}

我创建了一个 mdel,配置了一个 Action :

var action = modelBuilder.Entity<Member>().Action("SomeRequest");
action.Parameter<SomeRequest>("Info");
action.Returns<HttpResponseMessage>();
var model = modelBuilder.GetEdmModel();
configuration.EnableOData(model);

在 Controller 中有代码:

[HttpPost]
public HttpResponseMessage RequestIDCard(int key, [FromBody]ODataActionParameters param)
{
object value;
param.TryGetValue("Info", out value);
///!!!!
}

并期望对真实类型 SomeRequest 有值(value),转换类型并处理它......然后我用 header 发出 POST 请求

Content-Type: application/json;json=light; charset=utf-8 Accept: application/json;odata=light

和 body

{"Info":{"Reason":1}}

但我得到类型为“Newtonsoft.Json.Linq.JObject”的对象,并确定它不能被转换!但是,如果我将对象类型更改为 int,一切正常:)是WebAPI OData的bug还是我做错了什么?

最佳答案

您的使用有一些问题,

  1. 枚举映射到 aspnet Web API OData 中的字符串。因此,您的请求正文应该改为 { "Reason": 'Duplicate'。
  2. 正如 Jen 已经指出的那样,application/json;odata=light 不是受支持的媒体类型。您可能希望使用“application/json;odata=minimalmetadata”或仅使用“application/json”。
  3. action.Returns< HttpResponseMessage > 没有用。这会将 HttpResponseMessage 映射为服务的 EDM 模型中的复杂类型。我不确定映射会是什么样子。通常,您希望在正在构建的 EDM 模型中公开模型中的类型。你应该从你的模型中选择一个更具体的类型,更像是,

    action.Returns< IDCard >();

关于.net - OData Web API 操作参数反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14880960/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com