将以“.cshtml”结尾的请求路由到控制器

时间:2011-08-26 21:00:00

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

(这是ASP.NET表单的cross-posted

我正在研究WebGit .NET项目,我们接近“1.0”版本。但是,我无法使用“浏览”控制器(将文件从存储库中取出)来提供“.cshtml”文件。

我最初也遇到了“.config”和“。cc”文件的问题,但是我在web.config中解决了这个问题:

  <location path="browse">
    <system.webServer>
      <security>
        <requestFiltering>
          <fileExtensions allowUnlisted="true">
            <clear />
          </fileExtensions>
          <hiddenSegments>
            <clear />
          </hiddenSegments>
        </requestFiltering>
      </security>
    </system.webServer>
  </location>

应该处理此请求的路由(成功路由其他所有内容)是:

routes.MapRoute(
    "View Blob",
    "browse/{repo}/blob/{object}/{*path}",
    new { controller = "Browse", action = "ViewBlob", path = UrlParameter.Optional });

现在,每当我尝试访问以“.cshtml”结尾的URL时,即使我的请求应该由“浏览”控制器处理,它也会给出404。我正在服务的文件不存在于磁盘上,而是作为blob从git存储库中提取。我尝试过的每个其他文件扩展名都可以正常工作。

如何解决此问题?

<小时/> 编辑:我尝试过像这样禁用网页:

<appSettings>
  <add key="webpages:Enabled" value="false" />
</appSettings>

但这似乎没有效果。

2 个答案:

答案 0 :(得分:6)

作为一种快速解决方法,您可以在应用程序根目录中放置一个临时的browse.cshtml文件,并将其放在您的web.config中, add key =“webpages:Enabled”value =“false”

答案 1 :(得分:4)

这是ASP.NET WebPages中的已知错误,当​​您使用MVC 3时会隐式加载。我不认为有一种直接的方法可以禁用此行为。唯一的解决方法是使用不同的扩展名(特别是未通过WebPageHttpHandler.GetRegisteredExtensions()列出的扩展名)

然而,这将在MVC 4中修复。很抱歉给您带来不便。