asp.net-mvc-4 – 可为空的可选url参数的ASP.NET MVC 4 RC Web A
发布时间:2020-12-16 07:04:57 所属栏目:asp.Net 来源:网络整理
导读:我想为我的Web API创建一个全局的valdiation属性.所以我遵循 tutorial并最终得到以下属性: public class ValidationActionFilter : ActionFilterAttribute{ public override void OnActionExecuting(HttpActionContext actionContext) { if (actionContext.
我想为我的Web API创建一个全局的valdiation属性.所以我遵循
tutorial并最终得到以下属性:
public class ValidationActionFilter : ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext actionContext) { if (actionContext.ModelState.IsValid) { return; } var errors = new List<KeyValuePair<string,string>>(); foreach (var key in actionContext.ModelState.Keys.Where(key => actionContext.ModelState[key].Errors.Any())) { errors.AddRange(actionContext.ModelState[key].Errors .Select(er => new KeyValuePair<string,string>(key,er.ErrorMessage))); } actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest,errors); } } 然后我将它添加到Global.asax中的全局装配器: configuration.Filters.Add(new ValidationActionFilter()); 它适用于我的大多数操作,但与具有可选和可空请求参数的操作不一样. 例如: 我创建了一条路线: routes.MapHttpRoute( name: "Optional parameters route",routeTemplate: "api/{controller}",defaults: new { skip = UrlParameter.Optional,take = UrlParameter.Optional }); 我的ProductsController中有一个动作: public HttpResponseMessage GetAllProducts(int? skip,int? take) { var products = this._productService.GetProducts(skip,take,MaxTake); return this.Request.CreateResponse(HttpStatusCode.OK,this._backwardMapper.Map(products)); } 现在当我请求这个网址时:http:// locahost / api / products我得到了一个包含403状态代码和以下内容的响应: [ { "Key": "skip.Nullable`1","Value": "A value is required but was not present in the request." },{ "Key": "take.Nullable`1","Value": "A value is required but was not present in the request." } ] 我认为这不应该作为验证错误出现,因为这些参数都是可选的和可空的. 有没有人遇到过这个问题并找到了解决方案? 解决方法
如果你在Web API和MVC之间乱搞了你的代码,你应该使用来自Web API的RouteParameter而不是来自MVC的UrlParameter
routes.MapHttpRoute( name: "Optional parameters route",defaults: new { skip = RouteParameter.Optional,take = RouteParameter.Optional } ); 但: 您的路由skip和take的默认参数不会对您的路由机制起任何作用,因为您只是在查询字符串中使用它们,而不是在路由模板中使用它们.所以最正确的路线应该是: routes.MapHttpRoute( name: "Optional parameters route",routeTemplate: "api/{controller}" ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET设计网络硬盘之删除文件夹实现代码
- asp.net – Web服务互操作性 – wsdl复杂类型扩展
- asp.net-mvc – RedirectToAction不工作
- asp.net-mvc – 从nopCommerce插件扩展Razor Partial View
- Asp.Net:在iis中调试网站
- asp.net-mvc – 当tryUpdateModel无法在asp.net mvc 3中更新
- ASP.Net相当于PHP的file_get_contents(‘php:// input’);
- asp.net开发中怎样去突破文件依赖缓存
- ASP.NET缓存 方法和最佳实践
- asp.net-mvc – 无法在Web服务器上启动调试. Web服务器找不