将Web表单站点转换为MVC

时间:2014-01-17 21:01:55

标签: asp.net asp.net-mvc redirect

这似乎是一个常见的问题,但我无法在任何地方找到答案。

首先是一些背景。我有一个ASPX Web表单的ASP.NET网站。当浏览器请求 http://www.mysite.com/somefolder/ 时,IIS会提供 /somefolder/default.aspx 的内容。 http://www.mysite.com/somefolder/default.aspx 的请求也会收到 /somefolder/default.aspx

现在提出问题。我想逐渐将网站转换为MVC和Razor。需要执行哪些操作才能使 http://www.mysite.com/somefolder/ 的请求由MVC处理,并且 http://www.mysite.com/somefolder/default.aspx 的请求获得301重定向到 {{ 3}}

修改

以下是一些可能澄清我上述问题的其他信息。

过去,每当我“退出”一个ASPX页面时,我会在其代码隐藏中放置一个Response.RedirectPermanent来重定向到替换页面。如果 default.aspx 被MVC / Razor替换,或者应该发生不同的事情(例如删除 default.aspx 并使用路由来处理请求),是否应继续这种做法 http://www.mysite.com/somefolder/ )?

1 个答案:

答案 0 :(得分:0)

编辑:这是一个简单的解决方案。在Route.Config中,添加routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

在Global.asax.cs中添加:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var requestUrl = Request.Url.ToString().ToLower();

    //Default.aspx is converted to "Home/Index"
    if (requestUrl.Contains("/default.aspx"))
    {
        Context.Response.StatusCode = 301;
        Context.Response.Redirect("/Home/Index");
    }
}  

如果参数传递给页面,您可能需要解析requestUrl

我建议你阅读:ASP.NET MVC - Legacy Url Routing这有助于建立更好的解决方案。