Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC控制器是具有相同等效传入参数的模型,无效_C#_Angularjs_Asp.net Mvc_Asp.net Web Api_Validate Request - Fatal编程技术网

C# MVC控制器是具有相同等效传入参数的模型,无效

C# MVC控制器是具有相同等效传入参数的模型,无效,c#,angularjs,asp.net-mvc,asp.net-web-api,validate-request,C#,Angularjs,Asp.net Mvc,Asp.net Web Api,Validate Request,我不知道该怎么问这个问题,但不知何故我不得不 TL;我曾在一个系统上工作,由其他人传递给我,在某个地方运行,他们带着他们的有线请求和想法来到这里。所以我说让我们做X的事情,让它完成,但当我只是运行它,我看到它没有工作,因为它曾经。。。调试应用程序后,我到达目的地,测试并观察,就像我的头撞了一整天,我唯一能说的是,为什么一切都是正确的,为什么数据存在,为什么数据有效,控制器仍然说它无效:| 嗯。今天我又回到了同一个项目,同一个问题,我看到的是: 这是我发送的请求: { "Code" : 1

我不知道该怎么问这个问题,但不知何故我不得不

TL;我曾在一个系统上工作,由其他人传递给我,在某个地方运行,他们带着他们的有线请求和想法来到这里。所以我说让我们做X的事情,让它完成,但当我只是运行它,我看到它没有工作,因为它曾经。。。调试应用程序后,我到达目的地,测试并观察,就像我的头撞了一整天,我唯一能说的是,为什么一切都是正确的,为什么数据存在,为什么数据有效,控制器仍然说它无效:|

嗯。今天我又回到了同一个项目,同一个问题,我看到的是:

这是我发送的请求:

{
    "Code" : 16,
    "StampForm" : {
        "$error" : {},
        "$name" : "stampForm",
        "$dirty" : true,
        "$pristine" : false,
        "$valid" : true,
        "$invalid" : false,
        "$submitted" : true,
        "confirmUser" : {
            "$viewValue" : "a",
            "$modelValue" : "a",
            "$validators" : {},
            "$asyncValidators" : {},
            "$parsers" : [],
            "$formatters" : [null],
            "$viewChangeListeners" : [],
            "$untouched" : false,
            "$touched" : true,
            "$pristine" : false,
            "$dirty" : true,
            "$valid" : true,
            "$invalid" : false,
            "$error" : {},
            "$name" : "confirmUser",
            "$options" : null
        },
        "ReqNo" : "2",
        "ConfirmUser" : "a",
        "SabtDate" : "1395/06/15"
    },
    "MouseData" : {
        "locLeft" : 250.5,
        "locTop" : 395.53125,
        "width" : 812,
        "height" : 663,
        "mouseX" : 223.5,
        "mouseY" : 186.46875
    }
}
我使用的模型是:

public class StampForm
{
    public string ReqNo { get; set; }
    public string SabtDate { get; set; }
    public string FlightRef { get; set; }
    public string HotelRef { get; set; }
    public string ConfirmUser { get; set; }
    public string PassengerNum { get; set; }
    public string Price { get; set; }
    public string FlightNo1 { get; set; }
    public string FlightNo2 { get; set; }
    public string TicketSrv { get; set; }
    public string VoucherSrv { get; set; }
    /// <summary>
    /// تنظیم کننده
    /// </summary>
    public string Corrector { get; set; }
    /// <summary>
    /// اقامت
    /// </summary>
    public string Stay { get; set; }
    public string PersonPrc { get; set; }
    public string RoomPrc { get; set; }
    public CartableStampPositions Position { get; set; }
    public string Description { get; set; }
}

public class MouseData
{
    public float LocLeft { get; set; }
    public float LocTop { get; set; }
    public float LocRight { get; set; }
    public float LocBottom { get; set; }
    public float Width { get; set; }
    public float Height { get; set; }
    public float MouseX { get; set; }
    public float MouseY { get; set; }
}

public class StampVM
{
    public int Code { get; set; }
    public StampForm StampForm { get; set; }
    public MouseData MouseData { get; set; }
}
公共类StampForm
{
公共字符串要求{get;set;}
公共字符串SabtDate{get;set;}
公共字符串FlightRef{get;set;}
公共字符串HotelRef{get;set;}
公共字符串ConfirmUser{get;set;}
公共字符串PassengerNum{get;set;}
公共字符串Price{get;set;}
公共字符串FlightNo1{get;set;}
公共字符串FlightNo2{get;set;}
公共字符串TicketSrv{get;set;}
公共字符串VoucherSrv{get;set;}
/// 
/// تنظیم کننده
/// 
公共字符串校正器{get;set;}
/// 
/// اقامت
/// 
公共字符串Stay{get;set;}
公共字符串PersonPrc{get;set;}
公共字符串RoomPrc{get;set;}
公共CartableStampositions位置{get;set;}
公共字符串说明{get;set;}
}
公共级MouseData
{
公共浮点LocLeft{get;set;}
公共浮点LocTop{get;set;}
公共浮点LocRight{get;set;}
公共浮点数{get;set;}
公共浮点宽度{get;set;}
公共浮动高度{get;set;}
公共浮点MouseX{get;set;}
公共浮点鼠标{get;set;}
}
公共类StampVM
{
公共整数代码{get;set;}
公共StampForm StampForm{get;set;}
公共MouseData MouseData{get;set;}
}
在这里,当我调试时:

你看到了吗? “ConfirmUser”用“a”填充,它会产生错误,但除此之外,它不是“ConfirmUser”,而是“ConfirmUser”,它以小“c”开头,来自其他角度对象,具有相同的名称,它甚至不存在于我的模型中,但由于它具有相同的名称,控制器让它进入,并让它参与。给我带来很多麻烦和头痛。现在我抓到了它,我必须解决它,但是我应该如何告诉控制器忽略它呢?


更新,我忘了告诉您我使用的是MVC.Net WebAPI 2控制器,而不是MVC控制器

您可以向该方法添加以下属性

[Bind(Exclude = "ConfirmUser")] 
所以它看起来像这样

public ActionResult MyMethod([Bind(Exclude = "ConfirmUser")] MyModel model)

有一种解决方法-在viewmodel中添加JObject属性
confirmUser',以便(不需要的)确认用户对象绑定到该对象,而不是模型绑定器尝试将该
对象
绑定到
字符串`:

 public class StampForm
    {
        public string ReqNo { get; set; }
        public string SabtDate { get; set; }
        public string FlightRef { get; set; }
        public string HotelRef { get; set; }
        public string ConfirmUser { get; set; }

        [JsonProperty("confirmUser")]
        public JObject User { get; set; }
   ..........
}
结果将是:


我忘了提到我的控制器是MVC中的web api 2控制器,
.(…,[Bind(Exclude=“confirmUser”)]StampVM stamp)
.(…[Bind(Exclude(Exclude=“StampForm.confirmUser”)]StampVM stamp)
对我有效:(您有权对发送的请求进行更改吗?模型绑定器正在尝试绑定json对象
confirmUser
(因为模型绑定区分大小写)使用
string ConfirmUser
,最终导致错误,模型绑定器需要一个字符串,而请求包含一个对象。我建议从客户端发送一个只包含所需值的干净请求。@开发人员是否有可能创建自定义绑定器?我尝试过一次,但该属性在整个mo中运行一次del,不是每个字段,我试图找到活页夹本身,但我根本没有找到它…,仅此答案是最好的,但如果我能做到这一点,因为唯一可以使用web api的选项似乎只有
FromUri
,它没有任何Include/Exclude属性。@deadManN-在使用自定义活页夹之前,您是否有ol超过发送的请求?复制粘贴注释;错误地放在下面的答案下-您是否有权对发送的请求进行更改?模型绑定器正在尝试绑定json对象
confirmUser
(因为模型绑定区分大小写)使用您的
字符串确认用户
,从而导致错误,model binder需要字符串,而请求包含对象。我建议从客户端发送一个只包含所需值的干净请求。该请求是错误的,两个不同对象具有相同的属性名称没有意义。我建议继续对发送该请求的团队进行操作,并要求他们进行更改。一个糟糕的修复方法是将您的模型
字符串ConfirmUser
更改为一个对象,该对象的结构在请求中出现,并从
$modelValue
读取值,但需要注意的是,如果
currentUser'和
currentUser`输入的顺序发生变化,则会导致此错误terchanges in the request。@开发人员可能对MVC很满意,但在现实世界中不是这样,因为一个以大写字母“C”开头,另一个以小写字母“C”开头,这就是区别,这在java和C#中都是有效的,但是由于客户机标准和C#标准之间存在差异,服务器应该同时支持这两种标准,但它首先应该检查,如果发现match,不应该检查其他可能性,因为它有,那么我必须排除它们。是的,有点同意。但是这里的请求负载是垃圾;如果我没有错的话,这是完整的角度形式及其内部属性。在这种情况下,可能是这个特定操作的自定义模型绑定器,这就是我想知道如何编写的方法。。。这些活页夹是怎么一起工作的