2012-12-11 22 views
0

我有以下的自定義驗證:爲AuthorizeAttribute定製的驗證仍然運行過程

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記錄保存但響應正確(在驗證器中設置的那個) 我只想在驗證器失敗時停止執行操作。

回答

0

您知道一個操作需要返回一個視圖,以便用戶看到某種形式的輸出嗎?在控制器中使用Response.WriteResponse.End什麼也不做。

無論如何,你有什麼是屬性,而不是驗證。 如果它是驗證器,它將在視圖中使用的模型內部應用於屬性。

+0

多數民衆贊成在正確的先生,但是當我們使用'[授權]'屬性的行動不能正確執行?多數民衆贊成我想要做的,併爲響應=>'Response.Write'返回正確的數據,而不是視圖。 – Hilmi

+0

如果這個動作不應該執行,爲什麼你要在裏面測試Model.IsValid?這與你所說的相矛盾。再次,不要使用Response.Write。如果某件事情有效,那並不意味着它是好的做法。問題是你不明白你在做什麼。如果你更多地解釋你想做什麼,我可以幫你。 – Jeroen

+0

首先,非常感謝您的時間,我想要的是簡單的我想返回簡單的數據(json),當用戶沒有被授權的行動和終止行動...更清晰。操作如您所見'評論',評論功能對於沒有登錄的用戶不可用。它的ajax調用我想在用戶未被授權時返回json數據...並且對於IsValid這個屬性是調用以檢查以下(最小/最大長度/所需...),我希望它現在更清楚。 .. 謝謝 – Hilmi

相關問題