0

カスタム ルートの値を設定して、強制的に次の場所に移動する必要があります

サイト/管理者/elmah.axd

私のweb.configには次のものがあります:

<location path="elmah.axd">
 <system.web>
   <authorization>
     <allow roles="Admin" />
     <deny users="*" />
   </authorization>
 </system.web>
</location>

さらに、その他の関連するすべてのエルマ設定。そのセクションを削除すると、次のように入力できます。

サイト/elmah.axd

しかし、私は管理者だけがこのページにアクセスできるようにしたい.

私はあなたがログインする管理ページを持っています。あなたが管理者ロールにいる場合は、elmah.axd にリダイレクトされます。

    public AdminController(IRepository<User> userRepository)
    {
        _userRepository = userRepository;
    }

    //
    // GET: /Admin/

    public ActionResult Index()
    {
        return View(Constants.Admin);
    }

public ActionResult AdminLogin(string SSN)
    {
        var user = _userRepository.FindBy(x => x.UserName == SSN).SingleOrDefault();
        if (UserIsAnAdmin(user))
        {
            return RedirectToRoute("/elmah.axd");
        }
        return View(Constants.DeniedAccess);
    }

Global.asax ファイルにルート値があり、サポートが必要です。

 routes.MapRoute(
            "mocklogin",
            "{controller}/{action}", // URL with parameters
            new { controller = "MockLogin", action = "Index" } // Parameter defaults
            );


        routes.MapRoute(
            "elmah.axd",
            "{controller}/{action}", // URL with parameters

            );



        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}", // URL with parameters
            //need something here redirecting to the elmah.axd page      
    );

ページを自分のサイトの /elmah.axd ページにリダイレクトする方法はありますか?

最後に、自分のサイトの管理者ページに行きたいと思います。ユーザーが管理者の場合は送信をクリックすると、elmah.axd ページにリダイレクトしたいと思います。それ以外の場合は、カスタム エラー ページに移動します。どうにかしてコントローラーの ssn を取得し、条件を呼び出し、true の場合は elmah.axd にリダイレクトする必要があります。MVC で elmah.axd にリダイレクトするにはどうすればよいですか?

4

2 に答える 2

1

更新: 静的ルートにリダイレクトするには、Response.Redirect("URL"); を使用します。

下記参照 :

コントローラーとアクション以外を指すルートを作成することはできません。したがって、コントローラーのインデックス アクションで /elmah.axd へのリダイレクトを行い、デフォルト ルートをこのアクションに設定するのが最善です。

ルート :

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}", // URL with parameters

);

コントローラー:

    public AdminController(IRepository<User> userRepository)
    {
        _userRepository = userRepository;
    }

    public ActionResult Index()
    {
         Response.Redirect("/elmah.axd");
         return View(); //will not be hit
    }

    public ActionResult AdminLogin(string SSN)
    {
        var user = _userRepository.FindBy(x => x.UserName == SSN).SingleOrDefault();
        if (UserIsAnAdmin(user))
        {
            return RedirectToRoute("/elmah.axd");
        }
        return View(Constants.DeniedAccess);
    }

それが機能するかどうか教えてください。

于 2013-03-06T17:13:22.413 に答える
0

Application_AuthenticateRequestファイルで使用できGlobal.asaxます。

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    if (HttpContext.Current.User.IsInRole("Admin"))
        // Do your thing
}
于 2013-03-06T17:06:33.563 に答える