在我的MVC应用程序中,我有一个删除客户的控制器操作,我正在使用基于声明的授权来使用WIF。
问题:如果某人没有访问权限,他们会在浏览器中看到异常(包含stacktrace),但我宁愿重定向它们。
这样可以让我重定向:
public ActionResult Delete(int id)
{
try
{
ClaimsPrincipalPermission.CheckAccess("Customer", "Delete");
_supplier.Delete(id);
return RedirectToAction("List");
}
catch (SecurityException ex)
{
return RedirectToAction("NotAuthorized", "Account");
}
}
这有效但抛出SecurityException我不知道如何捕获(当用户未被授权时):
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation = "Delete", Resource = "Customer")]
public ActionResult Delete(int id)
{
_supplier.Delete(id);
return RedirectToAction("List");
}
我想使用声明式方法,但不确定如何处理未经授权的请求。有什么建议吗?
答案 0 :(得分:1)
您可以使用HandleError属性。您可以在此处查看其用法:ASP.Net MVC Preview 4 release
基本上,您应该能够使用HandleError属性修饰Delete ActionResult,并指定要捕获的异常类型和要显示的视图,如下所示:
[HandleError(ExceptionType = typeof(SecurityException), View = "UnauthorizedView")]
当然,您必须创建UnauthorizedView。如果您未指定视图,您将获得标准的错误视图(位于共享视图文件夹中)