这似乎是一个常见的问题,但我无法在任何地方找到答案。
首先是一些背景。我有一个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/ )?
答案 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这有助于建立更好的解决方案。