1

私の MVC アプリケーションでは、コントローラーのいくつかのメソッドを次のように装飾しました。

[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
public ActionResult Create(FormCollection collection)
{
    try {
             ...
    }
    catch {
        return View();
    }
}

実際、ログインしていないか、正しい役割を持っていない場合、MVC アプリケーションによって例外がスローされます。問題は、アプリケーションがエラー ページにリダイレクトされないことです。

次のようなベースコントローラーを作成してみました:

[HandleError]
public class BaseController : Controller
{
    protected override void OnException(ExceptionContext filterContext)
    {
        // Make use of the exception later
        this.Session["ErrorException"] = filterContext.Exception;

        // Mark exception as handled
        filterContext.ExceptionHandled = true;

        // ... logging, etc

        // Redirect
        filterContext.Result = this.RedirectToAction("Error", "Home");

        base.OnException(filterContext);
    }

}

次に、ホームコントローラーと実際のビューにエラービューを追加します。問題は、Visual Studio でこれを試すと、保護されたアクション メソッドに入ったときに最初に例外が発生することです。

 SecurityException was unhandled by the application

その後、Debug|Continue を実行する必要があり、その後にのみエラー ビューにリダイレクトされますが、本番アプリケーションではエラー ビューに直接移動する必要があるため、これは受け入れられません。

4

1 に答える 1

1

標準の AuthorizeAttribute だけを使用していない理由を考えてみてください。それが同じことをして、ただうまくいくと確信していますか?

例えば

[Authorize(Roles="Administrator")]
public ActionResult Create(FormCollection collection)

一般的な MVC セキュリティに関する記事はこちら。 http://www.codeproject.com/Articles/288631/Secure-ASP-NET-MVC3-applications

于 2012-09-28T00:26:13.753 に答える