在要提供 /api/MyApi 以及 /api/v2/MyApi 只有特定某個 action 需要 override
或是產品提供基礎功能的 abstract class 提供給專案客製空間時可以使用到
if (!ModelState.IsValid) return new HttpStatusCodeResult(HttpStatusCode.BadRequest)
public class ModelStateValidationFilter : System.Web.Mvc.ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{
if (!filterContext.Controller.ViewData.ModelState.IsValid)
{
var errors = from errs in (
from modelstate in filterContext.Controller.ViewData.ModelState.Values
select modelstate.Errors
)
where errs.Count > 0
select errs[0].ErrorMessage;
// 用 Elmah 記錄誰在哪邊沒通過驗證
Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception(String.Join(",",errors.ToArray())));
// 回應錯誤
throw new HttpException(400);
}
}
}
filters.Add(new ModelStateValidationFilter());