使用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,我在查找
Request
和CreateErrorResponse
时遇到了麻烦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/