По умолчанию содержимое папок Views
не должно быть доступно нормальному конвейеру запросов. Папка Views
содержит домашние файлы просмотра (.cshtml
), которые будут выполняться механизмом просмотра. Если вы посмотрите на файл web.config, расположенный внутри ~/Views
, то увидите, что у нас зарегистрировано BlockViewHandler
, которое запрещает прямой доступ ко всем файлам.
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode"
type="System.Web.HttpNotFoundHandler" />
</handlers>
Вам следует рассмотреть возможность перемещения вашего pdf-файла в каталог Statics
в корне приложения и указать на него.
Теперь, укажите на это место
<a href="~/Statics/TermsOfService.pdf">Terms of Service</a>
Вы можете указать собственное имя для каталога. Некоторые люди любят хранить его в каталоге Content
. Так что это скорее личное предпочтение.
В ядре asp.net каталог wwwroot
по умолчанию является домашним статическим содержимым. Таким образом, вы можете хранить внутри себя статическое содержимое (это можно переопределить)
Вы можете внести изменения в файл web.config, расположенный в каталоге views
, чтобы разрешить прямой просмотр, но более надежный подход состоит в том, чтобы не загрязнять соглашение и перемещать статические ресурсы в его собственную папку. Если вы абсолютно хотите разрешить прямой доступ к файлам в каталог представлений, вы можете обновить значение атрибута path
, чтобы сообщить mvc о запрете доступа только к файлам с определенным расширением. Вот как вы будете предотвращать только .cshtml
файлы (поэтому pdf будет работать)
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode"
type="System.Web.HttpNotFoundHandler" />
</handlers>