3

我在 ASP.Net mvc 的路由机制中发现了一个限制,我正在尝试找到一种解决方法。

我在这里发布了一个关于我遇到的问题的相关问题。

问题的要点是路由以 . (句点)从不被默认路由机制处理。总是抛出“找不到资源”错误。例如它不能处理这些 url:

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

如果我将它更改为这样的查询字符串参数,它可以正常工作:

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 方法。当然,我什至无法到达控制器。

考虑到 Wikipedia 使用的 Apache 服务器可以很好地处理这个问题,这似乎是一个很大的限制。试试http://en.wikipedia.org/wiki/Washington,_D.C. 如果有人可以请在这里提供一些帮助,我将不胜感激。

4

1 回答 1

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");
于 2009-06-08T09:41:38.747 回答