2016-09-30 33 views
1

試圖瞭解如何在調用具有Authorize標頭且僅重定向到視圖的控制器操作時避免請求用戶名和密碼。如何在ASP.NET MVC中授權失敗時顯示自定義錯誤

在我的web.config我有

<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" cacheRolesInCookie="false"> 
    <providers> 
    <clear /> 
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
    </providers> 
</roleManager> 
<authentication mode="Windows" /> 
<authorization> 
    <deny users="?" /> 
</authorization> 

然後,在我的控制,我前綴的動作如下

[Authorize(Roles = "DOMAIN\\Group")] 
    public ActionResult Index() 
    { 
     ...controller action code here 
    } 

如果我將其設置爲我屬於一個域\組到,那麼應用程序就像預期的那樣工作。如果我將其更改爲虛假組進行測試,則會顯示用戶名和密碼對話框。顯然,認證永遠不會發生。如果我在對話框中單擊取消,我會重定向到401錯誤頁面。

我想要做的是,因爲根據定義在web.config文件中只有Windows用戶可以連接,如果該Windows用戶不在所選組中,只需重定向到特定的View而不是提示用戶名和密碼。

回答

5

您可以創建自定義屬性並覆蓋HandleUnauthorizedRequest。然後,您重定向到自定義頁面,如果授權失敗,

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
     else 
     { 
      filterContext.Result = new RedirectToRouteResult(new 
      RouteValueDictionary(new { controller = "Common", action = "AccessDenied" })); 
     } 
    } 
} 

[CustomAuthorize(Roles = "DOMAIN\\Group")] 
public ActionResult Index() 
{ 
    ... 
} 
+0

DOH !!對於.NET和C#來說相當新,我忘了所有關於自定義驗證類。像魅力一樣工作 –

相關問題