【问题标题】:Routing requests that end in ".cshtml" to a controller将以“.cshtml”结尾的请求路由到控制器
【发布时间】:2012-04-17 01:46:04
【问题描述】:

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

我正在开发WebGit .NET 项目,我们即将发布“1.0”版本。但是,我无法让我的“浏览”控制器(将文件从存储库中拉出)来提供“.cshtml”文件。

我最初也遇到了“.config”和“.cs”文件的问题,但我在 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,即使我的请求应该由“浏览”控制器处理。我提供的文件不存在于磁盘上,而是从 git 存储库中提取为 blob。我尝试过的所有其他文件扩展名都可以正常工作。

如何解决此问题?


编辑: 我曾尝试像这样禁用网页:
<appSettings>
  <add key="webpages:Enabled" value="false" />
</appSettings>

但这似乎没有效果。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    不过,这将在 MVC 4 中得到修复。很抱歉给您带来不便。

    【讨论】:

    • 感谢您的信息。是否有注册的错误跟踪器?
    • 嗯,它在我们的内部错误跟踪器中进行了跟踪 - 并且修复已经签入 :) 但对于其他此类错误 connect.microsoft.comaspnet.codeplex.com 是不错的地方。
    • Imran 有一个我选择的解决方案,它实际上对我有用。您可能想让您的其他客户知道有一种变通方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 2018-02-17
    相关资源
    最近更新 更多