Как заставить /views/shared/_layout.cshtml на сайте Razor возвращать страницу 404 - PullRequest
5 голосов
/ 28 февраля 2011

Я хочу, чтобы этот URL (/views/shared/_layout.cshtml) генерировал код ответа 404 и отображал мою пользовательскую страницу 404.В настоящее время он генерирует эту ошибку 500 и трассировку стека:

Сведения об исключении: System.Web.HttpException: Файлы с начальными подчеркиваниями ("_") не могут быть обработаны.

Трассировка стека: [HttpException (0x80004005): файлы с начальными подчеркиваниями ("_") не могут быть обработаны.] System.Web.WebPages.WebPageRoute.GetRouteLevelMatch (String pathValue, IEnumerable 1 supportedExtensions, VirtualPathFactoryManager virtualPathFactoryManager) +291 System.Web.WebPages.WebPageRoute.MatchRequest(String pathValue, IEnumerable 1 поддерживаемые расширения, VirtualPathFathoryFactMaseManagerManager).Web.WebPages.WebPageRoute.DoPostResolveRequestCache (контекст HttpContextBase) +222 System.Web.WebPages.WebPageHttpModule.OnApplicationPostResolveRequestCache (отправитель объекта, EventArgs e20.System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое и завершено синхронно) + 120

Ответы [ 7 ]

1 голос
/ 15 июня 2012

Если вы посмотрите на код, который выдает исключение: это происходит потому, что модуль WebPageHttpModule подключил обработчик PostResolveRequestCache, который пытается разрешить маршрут.Затем он обнаруживает неверный путь и barfs.

Возможно, если вы сможете зарегистрировать свой собственный IHttpModule до WebPageHttpModule, вы можете выполнить запрос до того, как это сделает обработчик PostResolveRequestCache по умолчанию.

Еще один вариантможет быть, подключиться к событию Application_Error, а затем исследовать исключение и вернуть 404, если это необходимо.

1 голос
/ 28 февраля 2011

Убедитесь, что в вашем файле Views\web.config есть следующие настройки:

<appSettings>
  <add key="webpages:Enabled" value="false" />
</appSettings>
0 голосов
/ 06 августа 2015

Для меня это был отсутствующий файл Sitecore.Mvc.config, вызвавший проблему, предложенную Тиммом

0 голосов
/ 22 марта 2013

У меня только что была эта проблема, и я нашел правильный ответ здесь:

Не удалось найти страницу макета "{путь}"

Это ответ на переполнение стека.

0 голосов
/ 07 сентября 2012

Я не знаю, все же вы получили правильный ответ или нет.

Сегодня я только что узнал, что: Веб-страницы ASP.NET имеют свойство типа -

Предотвращение просмотра файлов

В ASP.NET файлы с именем, начинающимся с подчеркивания, нельзя просматривать в Интернете.

Если вы хотите предотвратитьБлоки содержимого или файлы макетов, просматриваемые пользователями, переименовывают файлы в:

_header.cshtm

_footer.cshtml

_Layout.cshtml

Ссылка для просмотра этой информации: http://www.w3schools.com/aspnet/webpages_layout.asp.

Имея это в виду, подчеркивание (_) в начале любого имени файла должно использоваться для защиты ваших частичных файлов от просмотра в Интернете.

Думаю, теперь вам понятна причина.

0 голосов
/ 11 июля 2012

Это старый вопрос, но если у кого-то есть такая же проблема, вы можете попробовать это решение.

Проблема возникает из-за того, что имя файла начинается с подчеркивания (что приводит к возвращению HTTP 500),Чтобы решить эту проблему, вы должны переименовать файл, чтобы удалить подчеркивание.Теперь вы должны начать получать HTTP 404, если у вас есть веб-страницы: Включено, установлено значение false в web.config.

<appSettings>
  <add key="webpages:Enabled" value="false" />
</appSettings>
0 голосов
/ 28 февраля 2011

Если вы используете IIS в интегрированном режиме, возможно, заблокируйте на уровне сервера:

  <system.webServer>
    <!--- any others here --->
    <handlers>
      <!--- any others here --->
      <add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...