![](/img/trans.png)
[英]intranet windows authentication with with custom login page in ASP.NET MVC
[英]Custom error page for failed windows authentication in ASP.NET MVC application
根據如何使用Windows身份驗證中的自定義錯誤頁面 (盡管從未標記為答案),您必須添加IIS HTTP錯誤處理程序以“捕獲”失敗的Windows身份驗證並提供自定義錯誤頁面。
但是,永遠不會達到403,失敗的WinAuth會以401 Unauthorized結尾。 但是,如果我為401添加IIS HTTP錯誤處理程序,則NTLM身份驗證過程不再起作用(內部也使用401)。
Windows身份驗證失敗時,有人對自定義錯誤頁面(不是靜態的,我想執行MVC控制器操作!)有可行的解決方案嗎?
下面的代碼並不完全符合您的需要,但這就是我處理未處理的異常的方式。 您可以根據狀態代碼或異常類型將其更改為不同的路由。 (來自Global.asax)
protected void Application_Error(object sender, EventArgs e)
{
var ex = Server.GetLastError().GetBaseException();
Server.ClearError();
var routeData = new RouteData();
routeData.Values.Add("controller", "Error");
routeData.Values.Add("action", "Global");
int status = 0;
if (ex.GetType() == typeof(HttpException))
{
var httpException = (HttpException)ex;
var code = httpException.GetHttpCode();
status = code;
}
else
{
status = 500;
}
//Create a new error based off the exception and the error status.
NameSpace.Models.ErrorModel Error = new ErrorModel(status, ex);
string innerException = "";
if (ex.InnerException != null)
{
innerException = "\n Inner Ex: " + ex.InnerException.StackTrace;
}
log.Error("Error Id: " + Error.ErrorId + " Error: " + ex.Message + ". Stack Trace: " + ex.StackTrace + innerException);
routeData.Values.Add("error", Error);
IController errorController = new NameSpace.Controllers.ErrorController();
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
更新:抱歉,我沒有完全閱讀您的帖子。 如果要在應用程序中執行LDAP身份驗證,則可以利用以上代碼來捕獲並使用控制器處理錯誤。 不幸的是,我無法在上述問題上提供直接指導。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.