使用MVC4,我能够创建并注册一个全局 Action 过滤器,该过滤器将在执行 Action 之前检查模型状态,并在可能造成任何损害之前返回序列化的ModelState

public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
    if (!actionContext.ModelState.IsValid)
    {
        actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
    }
}

但是,对于MVC5,我在查找RequestCreateErrorResponse时遇到了麻烦
public override void OnActionExecuting(ActionExecutingContext nActionExecutingContext)
{
    if (!nActionExecutingContext.Controller.ViewData.ModelState.IsValid)
    {
        nActionExecutingContext.Result = // Where is Request.CreateErrorResponse ?
    }
}

我意识到我可以创建一个自定义响应类来分配给Result,但是如果CreateErrorResponse仍然可用,我宁愿使用内置的响应类。

知道在MVC5/Web API 2中相对于ActionExecutingContext可以找到它的地方吗?

最佳答案

必须

using System.Net.Http;

代替
using System.Web.Http;

然后工作:
using System.Net;
using System.Net.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;

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

关于asp.net-mvc-5 - 自定义ActionFilterAttribute OnActionExecuting中的MVC5/API2 CreateErrorResponse,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23501352/

10-13 00:33