2012-06-12 92 views
1

我正在使用Windows身份驗證。身份驗證正常工作(用戶加載了角色)。爲401(授權失敗)提供自定義錯誤頁面

這是授權失敗(使用Authorize)屬性,我想提供一個自定義錯誤頁面。看起來HandleError屬性僅針對拋出的異常而被調用,但不適用於任何錯誤狀態代碼(>= 300)。

自定義錯誤部分:

<customErrors mode="On" defaultRedirect="~/Error/"> 
    <error statusCode="404" redirect="~/Error/NotFound/" /> 
    <error statusCode="401" redirect="~/Error/NotAuthorized/" /> 
</customErrors> 

我得到了一個ErrorController返回意見。但它永遠不會被調用。

我是否必須開始在自定義Authorize屬性中拋出異常以便能夠處理401,還是有更好的MVC3特定方法?

回答

2

您可以在CustomAuthorize

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 
    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary 
             { 
              {"area", ""}, 
              {"controller", "Error"}, 
              {"action", "NotAuthorized"}, 
              {"returnUrl", filterContext.HttpContext.Request.RawUrl} 
             }); 
} 
+0

當然覆蓋HandleUnauthorizedRequest。但是由於無法擴展,所以處理得到的具體實現是特定的。我寧願堅持我目前的解決方案:http://blog.gauffin.org/2012/06/asp-net-mvc3-custom-error-for-401-unauthorized/ – jgauffin

+0

@jgauffin我沒有看到任何需要因爲沒有任何代碼錯誤。你可以毫無例外地將用戶重定向到你的'NotAuthorized' Error頁面,那麼拋出一個異常是什麼意思? –

+0

我將你的解決方案與另一個在自定義授權屬性中生成完整結果的解決方案混合在一起。 – jgauffin

相關問題