首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ASP.Net MVC中设置路由,使对html文件的请求绕过StaticFileHandler并由路由引擎处理?

如何在ASP.Net MVC中设置路由,使对html文件的请求绕过StaticFileHandler并由路由引擎处理?
EN

Stack Overflow用户
提问于 2013-02-11 20:00:31
回答 1查看 1.2K关注 0票数 2

我可以(不使用runAllManagedModulesForAllRequests = true)用*.html将urls路由到默认的控制器/操作模式吗?

我需要所有的请求:www.myhost.com/any/any/ all d.html到www.myhost.com/home/oldlink与"link“RouteData key =”any/any/all d.html“。

我尝试了MapRoute与{*链接}和约束链接= ".html$",但所有的请求与点捕捉StaticFileHandler.

EN

回答 1

Stack Overflow用户

发布于 2013-02-16 20:06:58

您可以使用这样的路线:

代码语言:javascript
复制
routes.MapRoute("", "{*link}",  
                new { action = "oldlink", controller = "home" });

这将将所有请求定向到以下控制器和操作方法:

代码语言:javascript
复制
public class HomeController : Controller
{
    public ActionResult OldLink(string link)
    {
        //implement method...
        return View((object)link);
    }
}

星号表示该段是所谓的“集水区”段。这允许您将任意长度的URL匹配到单个路由。在此路由中,URL中主机名之后的所有段都分配给"link“字符串变量。

例如,输入URL:

代码语言:javascript
复制
http://localhost/foo/bar/file.html

它将路由到OldLink方法,"link“字符串变量将具有以下值

代码语言:javascript
复制
"foo/bar/file.html"

关于这条路线,有几点要注意:

  1. 此路由的URL模式将匹配所有传入URL。因此,应用程序中的任何URL都将路由到"home“控制器上的"oldlink”操作。使用此路由,您将无法获得任何URL到任何其他路由。
  2. 默认情况下,ASP.Net路由引擎将首先检查磁盘上是否存在与该URL匹配的物理文件。这样,您就不需要担心路由系统对静态文件(如css或javascript文件)的路由请求。这意味着,如果将URL发送到与磁盘上的文件匹配的应用程序,它将不会被路由到"home“控制器上的"oldlink”操作。如果要更改此默认行为并让路由引擎路由everything,包括对静态文件的请求,则需要将以下行添加到global.asax文件的"RegisterRoutes“方法中: routes.RouteExistingFiles =真;

有关URL段中所有路由段的更多信息,请参见这个优秀的MSDN关于路由的文章中题为“处理URL模式中可变数量的段”的部分。有关RouteExistingFiles属性的详细信息,请看这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14819837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档