gpt4 book ai didi

c# - 我可以将基于接口(interface)的对象传递给 MVC 4 WebApi POST 吗?

转载 作者:可可西里 更新时间:2023-11-01 02:59:19 25 4
gpt4 key购买 nike

我想要这样的 API:

public class RelayController : ApiController
{
// POST api/values
public void Post([FromBody]IDataRelayPackage package)
{
MessageQueue queue = new MessageQueue(".\\private$\\DataRelay");
queue.Send(package);
queue.Close();
}
}

我得到的“包”值为空,所以我想知道可能出了什么问题。我唯一的想法是默认的 JSON 序列化器无法处理这个问题,但我不清楚如何修复它。

最佳答案

您可以使用自定义模型 Binder 轻松完成此操作。这对我有用。 (使用 Web API 2 和 JSON.Net 6)

public class JsonPolyModelBinder : IModelBinder
{
readonly JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };

public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var content = actionContext.Request.Content;
string json = content.ReadAsStringAsync().Result;
var obj = JsonConvert.DeserializeObject(json, bindingContext.ModelType, settings);
bindingContext.Model = obj;
return true;
}
}

Web API Controller 如下所示。 (注意:也应该适用于常规 MVC 操作——我之前也为它们做过类似的事情。)

public class TestController : ApiController
{
// POST api/test
public void Post([ModelBinder(typeof(JsonPolyModelBinder))]ICommand command)
{
...
}
}

我还应该注意,当您序列化 JSON 时,您应该使用相同的设置对其进行序列化,并将其序列化为一个接口(interface),以使自动启动并包含类型提示。像这样。

    JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };
string json = JsonConvert.SerializeObject(command, typeof(ICommand), settings);

关于c# - 我可以将基于接口(interface)的对象传递给 MVC 4 WebApi POST 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14124189/

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