AuthorizeAttribute的自定义验证可使进程保持运行

时间:2012-12-11 06:13:52

标签: asp.net asp.net-mvc

我有以下自定义验证器:

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记录但响应正确(验证器中设置的那个) 我只想在验证器失败时停止执行操作。

1 个答案:

答案 0 :(得分:0)

您知道某个操作需要返回一个视图,以便用户看到某种形式的输出吗?在控制器中使用Response.WriteResponse.End不会执行任何操作。

无论如何,你有一个属性,而不是验证器。 如果它是验证器,它将在视图中使用的模型中,应用于属性。