Почему мое RedirectToAction вызывает ошибку InvalidOperationException?C#

Место общения программистов C#
Ответить
Anonymous
 Почему мое RedirectToAction вызывает ошибку InvalidOperationException?

Сообщение Anonymous »

У меня есть страница, расположенная в:
  • Области под названием «Действие»
  • Контроллере под названием «Сообщение». >
  • Метод под названием Index
Когда я вхожу в свое приложение, я перехожу к HomeController, который затем перенаправляет меня следующим образом:

Код: Выделить всё

public IActionResult Index()
{
return RedirectToAction("Index", "Messages", new { area = "Action" });
}
Однако я получаю следующую ошибку:

При обработке запроса произошло необработанное исключение.
InvalidOperationException : ни один маршрут не соответствует предоставленным значениям.
Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToActionResultExecutor.ExecuteAsync(ActionContext
context, RedirectToActionResult result)

Оно очень длинное, но я обнаружил, что оно как-то связано с моей последней строкой await.next() в моем Startup.cs:

Код: Выделить всё

app.Use(async (context, next) =>
{
if (context.Response.StatusCode == 404 && !context.Response.HasStarted)
{
string originalPath = context.Request.Path.Value;
context.Items["originalPath"] = originalPath;
context.Request.Path = "/Error/404";
await next();
}
if (context.Response.StatusCode == 401 && !context.Response.HasStarted)
{
string originalPath = context.Request.Path.Value;
context.Items["originalPath"] = originalPath;
context.Request.Path = "/Error/401";
await next();
}

if (context.Response.StatusCode == 302 && !context.Response.HasStarted && context.User.Identity.IsAuthenticated)
{
string originalPath = context.Request.Path.Value;
context.Items["originalPath"] = originalPath;
context.Request.Path = "/Error/302";
await next();
}
if (context.Response.StatusCode == 400 && !context.Response.HasStarted)
{
string originalPath = context.Request.Path.Value;
context.Items["originalPath"] = originalPath;
context.Request.Path = "/Error/400";
await next();
}
await next();
});
Это также моя маршрутизация в Startup.cs:

Код: Выделить всё

app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");

});
У меня есть именно этот файл Startup.cs в других приложениях, и они работают нормально. Не знаю, что с этим не так.
Полное исключение:

Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToActionResultExecutor .ExecuteAsync(ActionContext
контекст, результат RedirectToActionResult)
Microsoft.AspNetCore.Mvc.RedirectToActionResult.ExecuteResultAsync(ActionContext
контекст)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync( IActionResult
result)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext)
контекст)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext(ref State next, ref Scopescope, ref object status, ref
bool isCompleted )
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow (ResourceExecutedContext
контекст) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref
State next, ref Область области, ref состояние объекта, ref bool isCompleted)
Microsoft.AspNetCore.Mvc. Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext
httpContext)
Microsoft .AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext
httpContext)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext
context)
Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke (HttpContext
контекст)
Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext
контекст) SendEx.Startup+c+d.MoveNext() в
Startup. cs
+
await next(); Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext
контекст)
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext
httpContext)
Microsoft.AspNetCore . Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext
httpContext)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext
context)

Когда я удалил RedirectToAction() и заменил его возвращаемым Page(); Страница загружается. Значит, перенаправление области не работает?

Подробнее здесь: https://stackoverflow.com/questions/568 ... tion-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»