В моем приложении ASP.NET MVC я пытаюсь реализовать URL-адрес, как показано ниже:
/ product / tags / для + семей
Когда я пытаюсь запустить свое приложение с конфигурациями по умолчанию, я получаю это сообщение с кодом ответа 404.11:
Ошибка HTTP 404.11 - не найдено
Модуль фильтрации запросов настроен на отклонение запроса, который содержит двойную escape-последовательность.
Я могу обойти эту ошибку, реализовав следующий код в моем web.config:
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
Итак, теперь я не получаю 404.11
.
Что меня интересует, так это то, какие дыры в безопасности я открываю с помощью этой реализации.
Кстати, мое приложение работает под .Net Framework 4.0
и работает под IIS 7.5
.
Альтернативная причина этой ошибки: Удостоверьтесь, что Вы ждете своих асинхронных методов!
Требуемый {контроллер} URL
http://localhost:XXXXX/ / {действие} / Система. Время выполнения. CompilerServices. AsyncTaskMethodBuilder '1+AsyncStateMachineBox' 1 [Система. Гуид, Microsoft. EntityFrameworkCore. Запрос. Внутренний. QueryCompiler+d __ 21'1 [Система. Гуид]]Физический Путь
C: {проект }\\модели {определенная модель }\\Система. Время выполнения. CompilerServices. AsyncTaskMethodBuilder '1+AsyncStateMachineBox' 1 [Система. Гуид, Microsoft. EntityFrameworkCore. Запрос. Внутренний. QueryCompiler+d __ 21'1 [Система. Гуид]]
, Когда я называл return RedirectToAction(nameof(GrandParents), new { id = grandParentId });
, что должно было быть Гуидом, не был, потому что вызов для получения Гуида иначе grandParentId
не ожидался
Пример кода ниже:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateThing(ThingViewModel thingVM)
{
if (ModelState.IsValid)
{ //I forgot to await here, which wasn't the worst thing...
var toCreate = await CreateThingAsync(thingVM);
if(toCreate == null){ return View(thingVM); }
// I forgot to await here too, so instead of returning a Guid, it returned
// System.Runtime.CompilerServices.AsyncTaskMethodBuilder'1+AsyncStateMachineBox'1[System.Guid...
var grandParentId = await _context.ParentThings.AsNoTracking().Where(x => x.Id == thingVM.ParentId).Select(y => y.ParentId).FirstOrDefaultAsync();
// So this call was unhappy
return RedirectToAction(nameof(GrandParents), new { id = grandParentId });
}
return View(thingVM);
}