将asp.net mvc hocalhost / Products.aspx配置为hocalhost / Products

时间:2011-04-18 13:35:46

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

如何配置asp.net mvc路由以永久重定向301

hocalhost / Products.aspx和hocalhost / Search.aspx

hocalhost / Products和hocalhost / Search

即。从路径中删除 .aspx 扩展程序?

1 个答案:

答案 0 :(得分:2)

这些方面的东西应该可以解决问题。映射以下路线:

routes.MapRoute("Redirect route", "{file}.aspx", 
    new { controller = "home", action = "redirect" });

在控制器中定义Redirect操作:

public ActionResult Redirect()
{
    // use Request.RawUrl, for instance to parse out what was invoked

    // this regex will extract anything between a "/" and a ".aspx"
    var regex = new Regex(@"(?<=/).+(?=\.aspx)", RegexOptions.Compiled);
    var action = regex.Match(Request.RawUrl);

    return RedirectToActionPermanent(action.Value);
}

您可以将两个aspx页面重定向到同一个重定向路由,并通过解析HttpContext.Request.RawUrl来检测实际调用了哪个文件(尽管可能有更好的方法)。

<强>更新

确实有一种更简单的方法,正如@alex本人所发现的那样。要在原始请求中获取文件,只需执行以下操作:

string file = RouteData.Values["file"].ToString();