我发现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.如果有人愿意在这里提供一些帮助,我将不胜感激。
答案 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");