如何将控制器操作绑定到引用的dll中的模型

时间:2018-02-06 13:47:02

标签: c# asp.net-mvc .net-core model-binding

我正在尝试将JSON POST到我的.NET Core项目中的控制器操作。

相关的控制器动作:

public IActionResult Post([FromBody]PrivateModel value) {/*Process value*/}

问题是PrivateModel来自引用的dll。因此,自动模型绑定失败,value始终为空。

我认为这是模型不是本地的一个因素,因为如果我在项目中创建PrivateModel结构的副本并使用它,则数据被正确绑定。使用这个精简副本不是一个可行的解决方案,因为我需要使用PrivateModel的功能。

我有没有办法让模型绑定与引用的类一起工作?

2 个答案:

答案 0 :(得分:0)

=>请查看代码,这是参考目的。

  1. 您的API控制器,参数名称与ajax数据相同,例如 [data:param] 参数

  2. 您的Json帖子数据成员与您的参考dll类属性相同。

  3. API控制器

    //Also you can use ActionResult
    public HttpResponseMessage controller(Parameter param)
    {
        return Json // Return Json
    }
    

    参考DLL类例如

    public class Parameter
    {
        public string publish { get; set; }
        public string user { get; set; }
    }
    

    按钮上的Javascript功能点击

     function RunDemand() {
        var param = '{ publish : "On Demand",user : "Ankit" }';
        $.ajax({
            url: "/api/controller",
            type: "POST",
            data: param,
            contentType: "application/json; charset = utf-8",
            success: function (data) {
                if (data.success) {
                    //Do Process
                }
                else {
                    //Do Process
                }
            }
        });
    }
    

答案 1 :(得分:0)

Stephen Muecke是正确的。尝试从引用的dll绑定模型不是问题。

PrivateModel正在使用的自定义JSON序列化程序中存在错误,导致模型无法构建。我的本地副本没有遇到此错误,因为我没有指定他们应该使用自定义序列化程序。

修复序列化程序错误后,模型绑定工作正常,不再对我的代码进行进一步更改。