如何设置自定义路由值,以便只有具有Admin角色的成员才能访问MVC3中的elmah.axd页面

时间:2013-03-06 16:23:20

标签: asp.net-mvc-3 elmah

我需要设置一个自定义路由值,以便您被迫转到

站点/管理/ elmah.axd

在我的web.config中,我有:

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

加上所有其他相关的elmah设置。如果我删除该部分,我只需输入:

site / 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调用条件,如果真的重定向到elmah.axd。如何在MVC中重定向到elmah.axd?

2 个答案:

答案 0 :(得分:1)

更新:要重定向到静态路由,请使用Response.Redirect(“URL”);

见下文:

除了Controller和Action之外,您无法创建指向其他内容的路由。因此,最好的是您的Controller的索引操作会重定向到/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);
    }

让我知道它是否有效。

答案 1 :(得分:0)

您可以使用Application_AuthenticateRequest文件中的Global.asax

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    if (HttpContext.Current.User.IsInRole("Admin"))
        // Do your thing
}