ASP.NET MVC:“按原样”提供.cshtml文件

时间:2015-06-26 12:24:57

标签: asp.net-mvc razor

想象一下,ASP.NET MVC Web应用程序允许用户浏览服务器上某些VCS存储库的内容。现在,这个存储库包含*.cshtml个文件,我想按“原样”呈现。

换句话说,当用户导航到http://example.com/browse/directory/subdirectory/main.cs时,会显示main.cs文件的“原始”内容 - 这已经正常工作了。但是,访问http://example.com/browse/directory/subdirectory/main.cshtml会导致ASP.NET运行时内部出现HttpException。

我尝试从BlockViewHandler移除/browse并明确允许*.cshtml中的<requestFiltering>个文件 - 但无济于事:

                           

  <security>
    <requestFiltering>
      <fileExtensions>
        <remove fileExtension=".cshtml" />
        <remove fileExtension=".vbhtml" />

        <add fileExtension=".cshtml" allowed="true" />
        <add fileExtension=".vbhtml" allowed="true" />
      </fileExtensions>
    </requestFiltering>
  </security>
</system.webServer>

1 个答案:

答案 0 :(得分:1)

尝试直接从文件系统本身读取它,以便绕过剃刀。类似的东西:

string filePath = Server.MapPath("~/directory/subdirectory/main.cshtml");
string rawTemplate = System.IO.File.ReadAllText(filePath);

然后将其填充到ViewModel中或直接写入响应?您可能需要使用Html.Raw()来显示它,以便您可能希望从用户可以编辑的XSS内容中清除模板。