0

我有一個MVC應用程序,它使用索賠授權,基於偉大的教程可用here。在我的代碼重寫ClaimsAuthorizationManager的checkAccess方法來實現對每個資源和行動Asp.Net MVC HTTP錯誤401.0 - 未授權

public class CustomAuthorisationManager : ClaimsAuthorizationManager 
{ 
    public override bool CheckAccess(AuthorizationContext context) 
    { 
     string resource = context.Resource.First().Value; 
     string action = context.Action.First().Value; 

     if (action == "Show" && resource == "Code") 
     { 
      bool livesInScotland = context.Principal.HasClaim(ClaimTypes.Country, "Scotland"); 
      return livesInScotland; 
     } 

     return false; 
    } 
} 

我自己的邏輯,一切工作正常,相隔一個事實,即無論何時checkAccess方法返回false我得到HTTP錯誤401.0 - 未經授權,這因爲我已閱讀只能由IIS處理。我的問題是,如何在代碼中處理此錯誤以向用戶顯示自定義錯誤頁面。我見過很多不同的解決方案,例如herehere,但從未設法使它適用於我。

回答

0

您可以實施IHttpModule。實施一個指南可以找到here。關於httpmodule的好處是,你幾乎可以捕獲任何HTTP響應,並根據你的需要做你想做的事情。您可以查看this SO question。也許你會更喜歡它。

+0

我已經嘗試了IHttpModule解決方案,但我的應用程序沒有看到該模塊。你確定它可以在MVC中使用嗎?關於第二種解決方案,它只涉及由ASP處理的404和500錯誤,而據我所知,401由IIS解決(請參閱http://patrickdesjardins.com/blog/)。 asp-net-mvc-http-error-401-0-unauthorized) – Bartosz

+0

HttpModule在IIS級別而不是MVC。但是當你正在調試你的應用程序時,如果你有一個斷點,調試器會進入模塊。你有問題嗎?我們已經在''中註冊了該模塊,並設置了 '。我們沒有問題。 – pepo