2015-06-26 51 views
1

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

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

我试图从/browse取出BlockViewHandler,并明确允许<requestFiltering>*.cshtml文件 - 但无济于事:

<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

尝试直接从文件中读取它系统本身,所以它绕过剃刀。例如:

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

然后将其填充到ViewModel中或直接写入响应?你可能需要Html.Raw()来显示它,所以如果用户可以编辑它,你可能想从XSS东西中清理模板。

+0

这些.cshtml文件无论如何都不在磁盘上 - 它们位于VCS存储库中,我可以通过它编程获取它们。这里的罪魁祸首是以“.cshtml”结尾的URL,ASP.NET似乎在扼杀。 –