次のカスタマイズされたバリデーターがあります。
public class CAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
//if ajax request set status code and end responcse
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
filterContext.HttpContext.Response.Write(/*some data*/);
filterContext.HttpContext.Response.End();
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}
そして次のアクション
[HttpPost]
[CAuthorize]
public ActionResult Comment(Comment comment_obj)
{
if (ModelState.IsValid)
{
this.tblSomthing.comments.Add(comment_obj);
this.db.SaveChanges();
}
return /*some view*/
}
バリデーターが失敗したときにアクションが実行され、DB レコードが保存されるのに応答が正しい (バリデーターで設定されたもの) の理由 バリデーターが失敗した場合にアクションの実行を停止したいだけです。