C# WebAPI验证错误,即使数据有效
我已经创建了一个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,它正在生成错误消息: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.
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]
属性。