ASP. NET возвращает HTTP 500 вместо 404 - PullRequest
2 голосов
/ 26 марта 2020

По какой-то причине мое веб-приложение ASP. NET возвращает ошибку 500 (очевидно, происходящую из обработчика "ExtensionlessUrlHandler-Integrated-4.0") при доступе к несуществующему маршруту.

Эта проблема начал возникать после того, как я изменил path="*." на path="*" в строке <add name="ExtensionlessUrlHandler-Integrated-4.0" ... моего Web.config файла, чтобы решить другую проблему (сбой при обработке маршрутов с точкой после последней sla sh).

Я не могу изменить path обратно на "*.", хотя именно это предлагается в качестве решения в другом вопросе , потому что это вернет другая проблема - маршруты с точкой в ​​части после последнего sla sh больше не найдены.

Как и в этом связанном другой вопрос , я использую OData , Однако я не знаю, что это должно играть какую-либо роль в разрешении маршрута в моем случае вообще, потому что я думаю мы рассматриваем это как обычную библиотеку, на которую ссылаются в наших C# проектах и ​​которая вызывается несколько наших конечных точек веб-API.

<modules runAllManagedModulesForAllRequests="true"/> уже установлено в моем файле Web.config.

Что еще можно сделать, чтобы 404 возвращалось для неизвестных маршрутов и маршруты "extension-ful" (т. е. маршруты, последняя часть которых после последнего sla sh содержит точку) приняты?

EDIT: мне удалось увеличить мой журнал FREB размер и теперь видим, что ошибочная запись имеет номер 1346, говоря

ModuleName = "ManagedPipelineHandler", Notification = "EXECUTE_REQUEST_HANDLER", HttpStatus = "500", HttpReason = "Внутренняя ошибка сервера", HttpSubStatus = "0", ErrorCode = "Rekursion zu tief, Stapelüberlauf. (0x800703e9)", ConfigExceptionInfo = ""

В английском sh сообщение об ошибке означает: "Слишком глубокая рекурсия, переполнение стека. "

* 104 4 * Поэтому, похоже, это та же проблема, что и в другом вопросе , однако ответы оттуда не помогают в моем случае:
  • Филипп предлагает удалить различные обработчики, что для меня ничего не меняет.
  • Джо Дэвис предлагает решение с путем "*.", которое работает, но вызывает другое проблема , как описано выше.

Оба ответа относятся к разделу <handlers> в моем файле Web.config, который в настоящее время выглядит следующим образом:

<handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
    <remove name="OPTIONSVerbHandler"/>
    <remove name="TRACEVerbHandler"/>
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
</handlers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...