我正在研究Web API项目。我使用System.Web.Http.ApiController
作为控制器的基础
using System.Net;
using System.Web.Http;
using project.Models;
namespace project.Controllers
{
public class DemoController : ApiController
{
[HttpPost]
[Route("api/demo/submit")]
public object Post([FromBody] FormDataModel test)
{
...
}
}
}
我的模特是
using System;
using System.ComponentModel.DataAnnotations;
namespace server.Models
{
public class FormDataModel
{
[Required(ErrorMessage = "Phone is required")]
[Phone(ErrorMessage = "Invalid Phone")]
public string phone { get; set; }
}
}
当我发送无效的POST请求时-Post
操作仍将执行。我可以使用ModelState.IsValid
来跟踪无效的请求,但这似乎是一个多余的步骤,因为如果验证失败,我将一直希望我的操作以相同的响应形式停止执行。
是否存在用于在单个位置管理整个控制器/应用程序验证失败的标准方法?
谢谢!
答案 0 :(得分:0)
我相信您可以使用ActionFilters来做到这一点。查看这篇出色的文章:
https://smellyc0de.wordpress.com/2017/08/23/web-api-2-centralised-model-state-validation/
答案 1 :(得分:0)
这是一个ActionFilter,我可以用来做您要问的事情
public class ModelStateValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest,
actionContext.ModelState);
}
}
}
然后将其注册为全局处理程序
public static class FilterConfig
{
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new ModelStateValidationAttribute());
}
}