ASP NET MVC 5: RedirectToAction внезапно перестает работать

в моем проекте ASP.NET у меня есть форма, которая отправляет данные через POST в метод, который выглядит так:

[HttpPost]
public IActionResult PerformanceControl(int id, string button, ShowPerformanceControlViewModel viewModel)
{
     //some logic
     return RedirectToAction("PerformanceControl");
}

После того, как логика запустится, она должна перенаправить на следующее действие:

[HttpGet]
public IActionResult PerformanceControl(int id)
{
     //some logic
     return View(model);
}

Моя проблема в том, что RedirectToAction внезапно перестает работать, хотя до этого перенаправление работало 100 раз. Я использую Windows Server 2012 и IIS8. Остальная часть сайта до сих пор работает его только этот контроллер в котором вдруг перестает работать RedirectToAction. Я получаю только 404 для запроса GET к PerformanceControl.

Обновление:

Сегодня узнал почему не работает. Функции, которые перестают работать, зависят от внешнего сервера, размещенного на том же компьютере. Эта служба перестает принимать запросы, и поскольку в контроллере нет обработки ошибок, исключение просто запускается, и RedirectToAction никогда не будет выполнено. Журналы внешней службы «Connection_Dropped_List_Full DefaultAppPool» предназначены для сброса или сброса этого списка в IIS?


person Aragok    schedule 20.06.2018    source источник
comment
определить перестает работать   -  person Steve    schedule 20.06.2018
comment
Я получаю только 404 для GET-запроса к PerformanceControl и это внезапно, потому что до этого он работал 100 раз и не больше, только перезапуск приложения снова оживляет его.   -  person Aragok    schedule 20.06.2018
comment
@Cracksoldier Для ясности, эти два действия находятся в одном контроллере?   -  person Nkosi    schedule 20.06.2018
comment
да они в одном контроллере   -  person Aragok    schedule 20.06.2018
comment
Не могли бы вы добавить код из представления PerformanceControl?   -  person D-Shih    schedule 20.06.2018
comment
вы маршрутизацию поменяли? там должен быть необязательный именованный сектор {id}, иначе ваш /11 не будет рассматриваться как параметр id   -  person Steve    schedule 20.06.2018
comment
@D-Shih вот вставка с кодом: pastebin.com/KsGrqUem (в мою защиту этот код не от меня, я просто парень, который должен отладить это сейчас.) Кнопка, которую я использовал, находится в строке 319.   -  person Aragok    schedule 20.06.2018
comment
@ Стив, я никак не менял маршрутизацию, самое смешное, что она работает часами, а потом внезапно останавливается.   -  person Aragok    schedule 20.06.2018
comment
звучит как проблема с кешем для меня. убедитесь, что вы запускаете VS от имени администратора и выполняете чистую перестройку   -  person Steve    schedule 20.06.2018
comment
Хорошо, я попробую это и опубликую чистую сборку на моем сервере разработки.   -  person Aragok    schedule 21.06.2018
comment
Возможно, это проблема с IIS, вы смотрели файлы журнала? Подкод для 404 может быть полезен для определения причины.   -  person Mark G    schedule 21.06.2018
comment
Я просмотрел файлы журналов: «http://‹mysite›/Performance/PerformanceControl/11 404 0 0 96». Самое смешное, что в файлах журнала указано, что команда POST вернула 404, а в консоли разработчика Chrome указано, что команда GET не работает.   -  person Aragok    schedule 21.06.2018
comment
Возможно ли, что вы получаете необработанное исключение в своем коде, вызывающее перенаправление на отсутствующую страницу обработчика исключений?   -  person Mark G    schedule 21.06.2018
comment
Я уже думал об этом, можно ли настроить IIS таким образом, чтобы отображалось исключение? Должен ли я добавить метод в форму или это POST по умолчанию в ASP?   -  person Aragok    schedule 21.06.2018
comment
У вас должно быть что-то в вашем классе запуска, например app.UseExceptionHandler("/Home/Error");, но вы также, вероятно, должны обернуть свою логику в блоке try/catch в контроллере.   -  person Mark G    schedule 21.06.2018
comment
Сегодня я узнал, что есть httperr.log (я не знал, что в Windows он есть), мой проект зависит от другого приложения, и в то время, когда возникает ошибка перенаправления, журнал говорит об этом «Connection_Dropped_List_Full DefaultAppPool».   -  person Aragok    schedule 21.06.2018


Ответы (1)


Это может быть связано с тем, что RedirectToAction требует передачи идентификатора. Попробуй это:

return RedirectToAction("PerformanceControl", new { Id = id });
person Jason W    schedule 20.06.2018
comment
В браузере получаю сообщение 404: https://‹my-site›/Performance/PerformanceControl/11 не найден. Похоже, что он получает идентификатор. - person Aragok; 20.06.2018
comment
Я новичок в ASP.NET. Я начинаю с «/Performance/PerformanceControl/11» и отправляю свой пост о том, как фреймворк сохраняет идентификатор в конце. В ASP.NET я действительно не знаю, должен ли я добавить новый {Id = id}, чтобы убедиться, что он там, или это не имеет значения в ASP? - person Aragok; 20.06.2018
comment
Каждый раз, когда вы выполняете RedirectToAction, любые параметры, которые вы ожидаете от своего метода [Get], должны быть включены в вызов метода, как показано, чтобы предотвратить некоторые странные ошибки. ASP.NET обработает сопоставление со строкой привязки/запроса по умолчанию для перенаправления, а затем обработает сопоставление с параметрами метода из вашего действия. - person Jason W; 21.06.2018
comment
.NET сохраняет значения вашего идентификатора, потому что он уже указан в URL-адресе. Я бы все равно не стал предполагать и явно передавать значения вашего идентификатора маршрута. Затем исходный код пытается объединить значения маршрута, при этом идентификатор сохраняется в URL-адресе: github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/ - person Jason W; 21.06.2018