扩展Asp.Net MVC路由机制

时间:2009-06-03 16:13:08

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

我发现ASP.Net mvc的路由机制存在限制,我正试图找到解决方法。

我发布了一个关于我遇到的问题的相关问题here

问题的要点是以a结尾的路线。 (句点)永远不会被默认路由机制处理。始终抛出“无法找到资源”错误。例如,它无法处理这些网址:

http://www.wikipediamaze.com/wiki/Washington,_D.C.
http://www.wikipediamaze.com/wiki/anythingendinglikethis.

如果我将它更改为querystring参数,就可以了,它可以正常工作:

http://www.wikipediamaze.com/wiki/?topic=Washington,_D.C.

我正在尝试在路由机制中找到一个可扩展点来帮助我解决此问题。我尝试过这样的其他解决方案:

//Global.asax.cs
protected void Application_Error()
{
     var url = HttpContext.Current.Request.RawUrl;
     if(TopicRegex.IsMatch(url))
     {
         var fixedUrl = FixUrlPath(url);

         //This throws an error
         Response.Redirect(fixedUrl);

         //This also throws an error
         Server.Transfer(fixedUrl );
      }
}

我猜测Response.Redirect和Server.Transfer会抛出错误,因为在MVC中你应该从控制器调用RedirectToAction方法。当然我甚至无法到控制器。

考虑到维基百科使用的Apache服务器,这似乎是一个非常大的限制。尝试一下http://en.wikipedia.org/wiki/Washington,_D.C.如果有人愿意在这里提供一些帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您是否可以在路线中存在检查文件但允许某些扩展通过?

routes.RouteExistingFiles = true;

// Ignore the assets directory which contains images, js, css & html
routes.IgnoreRoute("Assets/{*pathInfo}");

// Ignore text, html, files.
routes.IgnoreRoute("{file}.txt");
routes.IgnoreRoute("{file}.htm");
routes.IgnoreRoute("{file}.html");
routes.IgnoreRoute("{file}.aspx");