1

在我的 MVC 应用程序中,我有一个删除客户的控制器操作,我正在应用基于声明的授权来使用 WIF。

问题:如果有人没有访问权限,他们会在浏览器中看到异常(完整的堆栈跟踪),但我宁愿只是重定向他们。

这有效并允许我重定向:

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");
}

我想使用声明性方法,但不确定如何处理未经授权的请求。有什么建议么?

4

1 回答 1

1

您可以使用 HandleError 属性。你可以在这里查看它的用法:ASP.Net MVC Preview 4 release

本质上,您应该能够使用 HandleError 属性装饰您的 Delete ActionResult 并指定要捕获的异常类型和要显示的视图,如下所示:

[HandleError(ExceptionType = typeof(SecurityException), View = "UnauthorizedView")]

当然,您必须创建 UnauthorizedView。如果您不指定视图,您将获得标准错误视图(位于 Shared Views 文件夹中)

于 2012-11-19T23:14:11.653 回答