想象一下,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>
答案 0 :(得分:1)
尝试直接从文件系统本身读取它,以便绕过剃刀。类似的东西:
string filePath = Server.MapPath("~/directory/subdirectory/main.cshtml");
string rawTemplate = System.IO.File.ReadAllText(filePath);
然后将其填充到ViewModel中或直接写入响应?您可能需要使用Html.Raw()来显示它,以便您可能希望从用户可以编辑的XSS内容中清除模板。