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

标签 c# asp.net-mvc post interface asp.net-web-api

我想要这样的 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/

相关文章:

c# - ServiceStack.DataAnnotations 缺少属性定义?

使用 System.Security.Cryptography.Aes 的 AES256 加密的 C# 示例

.net - MVC 5 中的 "CacheProfile"

c# - 如何从字符串中删除枚举?

c# - UWP AcrylicBrush 向后兼容最低版本 14393(周年更新)

c# - 如何在 asp.net MVC View 中有条件地设置模型?

c# - ASP.NET MVC 4 RouteLink 不工作

ruby - Microsoft Live 授权 GET 请求返回 Net::HTTPBadRequest 400

php - 如何使用 PHP 获取隐藏字段的值

PHP - 通过 POST 重定向和发送数据