.NET Core RedirectToAction вызывает ошибку InvalidOperationException - PullRequest
0 голосов
/ 04 июля 2019

У меня есть страница, расположенная в:

  1. Область с именем Action
  2. Контроллер с именем Message
  3. Метод с именем Index

Когда я захожу в свое приложение, я захожу в HomeController, который затем перенаправляет меня так:

public IActionResult Index()
{
    return RedirectToAction("Index", "Messages", new { area = "Action" });
}

Однако я получаю эту ошибку:

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

Это очень долго, но я обнаружил, что оно имеет отношение к моей последней строке 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)Internal.ResourceInvoker.Rethrow (контекст ResultExecutedContext) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext (следующее состояние: ref, область действия, состояние объекта ref, bool isCompleted).Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter () Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow (контекст ResourceExecutedContext) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next (ссылка «Состояние следующее», «Область действия», «Состояние объекта», «bool isCompleted») Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync ()Routing.EndpointMiddleware.Invoke (HttpContext httpContext) Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke (HttpContext httpContext) Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Injectke.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)

РЕДАКТИРОВАТЬ 2:

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

Ответы [ 2 ]

0 голосов
/ 22 июля 2019
return RedirectToAction("Index", "Messages", new { area = "Action" });

у этого будет маршрут как - Сообщения / Индекс / Действие поэтому, пожалуйста, проверьте, что вы хотите и соответствует ли это параметрам или нет.

Если вам нужно просто Mssage / или просто Index / создать новую конфигурацию маршрута для этого.

0 голосов
/ 04 июля 2019

Используйте только один маршрут.Попробуйте как ниже: -

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces:new[] {"MVCDemo.Controllers"}
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...