gpt4 book ai didi

asp.net-mvc-4 - 可选 url 参数可为空的 ASP.NET MVC 4 RC Web API ModelState 错误

转载 作者:行者123 更新时间:2023-12-02 11:36:41 26 4
gpt4 key购买 nike

我想为我的 Web API 创建一个全局验证属性。所以我按照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 中的全局 fitlers 中:

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."
}
]

我相信这不应该显示为验证错误,因为这些参数都是可选的且可为空。

有人遇到过这个问题并找到解决方案吗?

最佳答案

您可能还想避免/抑制 GET 请求中原始类型的模型验证。

public class ModelValidationFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid && actionContext.Request.Method != HttpMethod.Get)
{ ...

关于asp.net-mvc-4 - 可选 url 参数可为空的 ASP.NET MVC 4 RC Web API ModelState 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11904475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com