Когда клиент нажимает конечную точку PUT на моем веб-API, и эта конечная точка создает какие-либо исключения, весь Kestrel выходит из строя.
Visual Studio печатает:
Приложение находится в режиме перерыва
Ваше приложение вошло в состояние останова, но нет кода для показа, потому что все потоки выполняли внешний код (обычно системный или структурный код).
После того, как я нажму Продолжить выполнение Приложение закрывается с сообщением:
Программа '[5364] dotnet.exe' завершила работу с кодом 0 (0x0).
Интересно то, что если я делаю то же самое с конечной точкой POST, исключение попадает в мой ExceptionFilter или мой ErrorHandlingMiddleware (как я пробовал оба с одинаковым успехом), и приложение продолжает работать, как и ожидалось.
Так что это пойман:
[HttpPost]
public async void Post(SomeModel model)
{
throw new Exception();
}
Пока это закрывает приложение:
[HttpPut]
public async void Put(SomeModel model)
{
throw new Exception();
}
Я пытался очистить кэш Nuget, удалить папку bin, запустить приложение на Mac и в Windows, обновить .net Core SDK и Runtime и, возможно, несколько других вещей, которые я нашел в сети для смутно похожих проблем, но безуспешно.
Мое приложение работало на Kestrel, .NET Core SDK 2.1.302, время выполнения 2.1.2. С тех пор я обновился до .NET Core SDK 2.1.401, Runtime 2.1.3, но это не имело никакого значения. Та же самая история запуска его на IIS Express