Ответ 1
В схеме есть три возможных значения:
<attribute name="existingResponse" type="enum" defaultValue="Auto">
<enum name="Auto" value="0" />
<enum name="Replace" value="1" />
<enum name="PassThrough" value="2" />
</attribute>
Грубо, вот как я это понимаю:
PassThrough - оставляет существующий ответ только, если он есть. Возможно, ваша логика приложения ничего не возвращает. В этом случае используется страница ошибки, определенная здесь.
Авто - использует страницы ошибок IIS, как определено в этом node, за исключением случаев, когда вы указали в asp.net:
Response.TrySkipIisCustomErrors = true;
если вы это сделали, используется ответ от вашего кода.
Заменить - всегда использует страницы ошибок IIS, даже если разработчик установил TrySkipIisCustomErrors
.
Последний вариант, по-видимому, тот, который вы хотите.
Edit:
Рассмотрим:
existingResponse="PassThrough"
теперь попробуйте открыть несуществующую страницу asp.net, вы увидите:
Несмотря на то, что ресурса не было, среда выполнения предоставила ответ, она передается в браузер.
Теперь попробуйте открыть несуществующую страницу html. На этот раз мы по-прежнему получаем статус 404, но пустую страницу.
изменяется на:
existingResponse="Auto"
пропущенная страница asp.net по-прежнему отображает страницу с ошибкой asp.net, но для отсутствующей html-страницы теперь мы получаем IIS:
Итак, резюмируя: при просмотре отсутствующих страниц html и aspx с разными
existingResponse
, мы получаем разные страницы ошибок:
.html-404 .aspx-404 .aspx-500
--------------------------------------------------
Auto IIS asp.net asp.net
PassThrough - asp.net asp.net
Replace IIS IIS IIS