我在使用Windows身份驗證的MVC4應用程序中添加了Authorise attribute,並在測試時更改了活動目錄組的名稱,以檢查Global.asax類中的Application_Error
方法是否會捕獲非授權用戶。捕獲MVC4中Authorize屬性的異常
問題是沒有捕獲到異常,並且IIS高速緩存會引發401異常。是否可以捕獲這些類型的授權異常,如果有的話,是否有更好的方法來處理MVC應用程序中的異常?
方法
全球ASAX
protected void Application_Error()
{
System.Diagnostics.Debugger.Break();
}
IIS表達拋出401未授權異常
工作驗證
使用這種方法的作品,但它有點混亂。
if (User.IsInRole(@"DOMAIN\USER"))
{
if (ModelState.IsValid)
{
ctx.SaveChanges(model);
ViewBag.Notification = "Save Successful";
}
}
else
{
throw new HttpException(404, "Category not found");
}
默認批准─當屬性不會拋出任何異常。但正如我在我的回答中所建議的那樣,您可以輕鬆實現AuthorizeAttribute的自定義版本,並從HandleUnauthorizedRequest方法中引發所需的HTTPException。 – artokai
如果我假設'HandleUnauthorizedRequest'方法,特別是'actionContext.ControllerContext.Request.CreateErrorResponse'行確實包含響應中的異常。瀏覽器在響應頭中捕獲的內容。 –
這些方法只是將401狀態碼發送到瀏覽器。他們不會拋出任何可以在全局錯誤處理程序中處理的異常。我修改了我的答案,以包含引發必要異常的自定義授權屬性的示例。 – artokai