在global.asax.cs重定向路由

时间:2011-11-21 14:32:32

标签: .net asp.net-mvc-3 routes

我是否可以通过localhost/subscribe内的规则将访问localhost/subscribe.aspx的所有人重定向到global.asax.cs,还是应该从操作重定向?

3 个答案:

答案 0 :(得分:9)

以下代码应该适合您:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    if (Request.RawUrl.ToLower().EndsWith("subscribe")) 
    {
        Response.Redirect("subscribe.aspx");
    }
}

或者在 Application_PreRequestHandlerExecute 方法中,如果您还要使用会话进行验证

答案 1 :(得分:3)

菲尔哈克有一个redirecting using routes

的例子

但是对于一个网址,最简单的解决方案可能是从操作重定向。

答案 2 :(得分:2)

如果要将虚拟URL重定向到物理文件,在Global.asax中执行此操作非常容易:

protected void Application_Start(object sender, EventArgs e)
{
     RegisterRoutes(RouteTable.Routes);
     RouteTable.Routes.MapPageRoute("Key", "Home", "~/Public/Pages/Default.aspx");
}

在这种情况下,

  

http://www.example.com/Home

重定向到

  

http://www.example.com/Public/Pages/Default.aspx

只是一个FYI,执行此操作不会在客户端上重定向,它会在服务器上重定向,这意味着服务器不会返回带有新地址的302,它只是将您指向的内容发送回去

这对于添加变量也很有意义,例如:

routes.MapPageRoute("MainPublic3", "Public/Pages/{PAGE}/{CHILD}", "~/Public/Pages/Pages.aspx");

然后可以在后面的代码中访问它们,如下所示:

string page = Page.RouteData.Values["PAGE"];
string child = Page.RouteData.Values["CHILD"];

我们将它用于我工作的所有事情,当然我们正在转向MVC:)