C# WebAPI验证错误,即使数据有效

C# WebAPI验证错误,即使数据有效,c#,jquery,asp.net,json,asp.net-web-api,C#,Jquery,Asp.net,Json,Asp.net Web Api,我已经创建了一个web api,它以前工作得很成功。然而,有些东西已经改变了(不确定是什么),现在已经不起作用了 我使用fiddler编写了一个PUT to/api/Dealer/19,其中包含以下JSON数据: {“备注”:[],“dealerId”:19,“姓名”:“第四街汽车公司”,“电话”:“888-776-5085”,“网站”:“街道地址”:“5109普雷斯顿公路”,“城市”:“路易斯维尔”,“州”:“KY”,“zipCode”:40213} 我得到一个400错误响应: HTTP/1.

我已经创建了一个web api,它以前工作得很成功。然而,有些东西已经改变了(不确定是什么),现在已经不起作用了

我使用fiddler编写了一个PUT to/api/Dealer/19,其中包含以下JSON数据:

{“备注”:[],“dealerId”:19,“姓名”:“第四街汽车公司”,“电话”:“888-776-5085”,“网站”:“街道地址”:“5109普雷斯顿公路”,“城市”:“路易斯维尔”,“州”:“KY”,“zipCode”:40213}

我得到一个400错误响应:

HTTP/1.1400错误请求 服务器:ASP.NET开发服务器/11.0.0.0 日期:2013年12月31日星期二00:07:12 GMT X-AspNet-Version:4.0.30319 缓存控制:没有缓存 Pragma:没有缓存 过期:-1 内容类型:application/json;字符集=utf-8 内容长度:123 连接:关闭

{“经销商名称”:“请输入名称”,“经销商电话”:“请输入电话号码”,“经销商网站”:“请输入网站”}

我有一个ValidationActionFilter,它正在生成错误消息:

public class ValidationActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext context)
    {
        var modelState = context.ModelState;
        if (!modelState.IsValid)
        {
            var errors = new JObject();
            foreach (var key in modelState.Keys)
            {
                var state = modelState[key];
                if (state.Errors.Any())
                {
                    errors[key] = state.Errors.First().ErrorMessage;
                }
            }

            context.Response = context.Request.
                CreateResponse<JObject>(HttpStatusCode.BadRequest, errors);
        }
    }
}
公共类ValidationActionFilter:ActionFilterAttribute
{
公共重写无效OnActionExecuting(HttpActionContext上下文)
{
var modelState=context.modelState;
如果(!modelState.IsValid)
{
var errors=newjobject();
foreach(modelState.Keys中的var键)
{
var state=modelState[key];
if(state.Errors.Any())
{
errors[key]=state.errors.First().ErrorMessage;
}
}
context.Response=context.Request。
CreateResponse(HttpStatusCode.BadRequest,错误);
}
}
}
我的模型如下所示:

public class Dealer
{
    public int DealerId { get; set; }

    [Required(ErrorMessage = "Please Enter Name")]
    [StringLength(100, ErrorMessage = "Name is too long")]
    public string Name { get; set; }

    [Required(ErrorMessage="Please Enter Phone Number")]
    [StringLength(14, ErrorMessage = "Phone is too long")]
    public string Phone { get; set; }

    [Required(ErrorMessage = "Please Enter Website")]
    [StringLength(250, ErrorMessage = "Website is too long")]
    public string Website { get; set; }

    [StringLength(100, ErrorMessage = "Street Address is too long")]
    public string StreetAddress { get; set; }

    [StringLength(50, ErrorMessage = "City is too long")]
    public string City { get; set; }

    [StringLength(50, ErrorMessage = "State is too long")]
    public string State { get; set; }

    public int ZipCode { get; set; }

    public virtual ICollection<Note> Notes { get; set; }
}
公共类经销商
{
公共int DealerId{get;set;}
[必需(ErrorMessage=“请输入名称”)]
[StringLength(100,ErrorMessage=“名称太长”)]
公共字符串名称{get;set;}
[必需(ErrorMessage=“请输入电话号码”)]
[StringLength(14,ErrorMessage=“电话太长”)]
公用字符串电话{get;set;}
[必需(ErrorMessage=“请进入网站”)]
[StringLength(250,ErrorMessage=“网站太长”)]
公共字符串网站{get;set;}
[StringLength(100,ErrorMessage=“街道地址太长”)]
公共字符串StreetAddress{get;set;}
[StringLength(50,ErrorMessage=“城市太长”)]
公共字符串City{get;set;}
[StringLength(50,ErrorMessage=“状态太长”)]
公共字符串状态{get;set;}
公共int ZipCode{get;set;}
公共虚拟ICollection注释{get;set;}
}
即使字段存在,是什么导致了验证错误


谢谢

我猜MVC无法将数据绑定到您的模型,因此模型为空

如果是这种情况,请尝试重新格式化您发布的数据以反映模型

{"Dealer.Name":"..","Dealer.Phone":"..."...

我没有用
{“name”:…,“phone”:…}

而是换了它,但它仍然不工作。还是同样的错误。我发布到fiddler的JSON与从MVC控制器中的Newtonsoft JSonSerializer序列化到视图的JSON完全相同。我建议使用与您显示的400个响应相同的JSON,其中提到缺少这些名称的字段。您可以显示控制器操作方法吗?它可能缺少
[FromBody]
属性。