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 リリース

基本的に、次のように、Delete ActionResult を HandleError 属性で装飾し、キャッチする例外の種類と表示するビューを指定できる必要があります。

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

もちろん、その UnauthorizedView を作成する必要があります。ビューを指定しない場合は、標準のエラー ビューが表示されます (Shared Views フォルダーにあります)。

于 2012-11-19T23:14:11.653 に答える