gpt4 book ai didi

c# - 如何使用 Action 过滤器在 asp.net mvc 中集中模型状态验证?

转载 作者:IT王子 更新时间:2023-10-29 04:48:32 26 4
gpt4 key购买 nike

我在几个地方写了这段代码,并且总是重复这个逻辑:

public ActionResult MyMethod(MyModel collection)
{
if (!ModelState.IsValid)
{
return Json(false);//to read it from javascript, it's always equal
}
else
{
try
{
//logic here
return Json(true);//or Json(false);
}
catch
{
return Json(false);//to read it from javascript, it's always equal
}
}
}

有没有办法使用 Action 过滤器,而不是重复try-catch,询问模型是否有效并返回Json(false)作为 ActionResult?

最佳答案

为了符合 REST,您应该返回 http bad request 400 以指示请求格式错误(模型无效),而不是返回 Json(false )

试试这个来自 asp.net official site 的属性对于网络 API:

public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}

asp.net mvc 的版本可能是这样的:

public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.Controller.ViewData.ModelState.IsValid)
{
filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
}
}

关于c# - 如何使用 Action 过滤器在 asp.net mvc 中集中模型状态验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654669/

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