我的页面位于:
当我登录到我的应用程序时,我会转到 HomeController,然后它会像这样重定向我:
public IActionResult Index()
{
return RedirectToAction("Index", "Messages", new { area = "Action" });
}
但是,我收到此错误:
处理请求时发生未处理的异常。 InvalidOperationException:没有路由与提供的值匹配。 Microsoft.AspNetCore.Mvc.Infrastruct.RedirectToActionResultExecutor.ExecuteAsync(ActionContext 上下文,RedirectToActionResult 结果)
它很长,但我发现它与我的 Startup.cs 中的最后一个 wait.next() 行有关:
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.Infrastruct.RedirectToActionResultExecutor.ExecuteAsync(ActionContext 上下文,RedirectToActionResult 结果) Microsoft.AspNetCore.Mvc.RedirectToActionResult.ExecuteResultAsync(ActionContext 语境) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult 结果) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsync
() Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext 语境) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext (ref 状态下一个,ref 范围范围,ref 对象状态,ref bool 已完成) 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 范围范围,ref 对象状态,ref bool isCompleted) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext http上下文) Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext http上下文) Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext 语境) Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext 语境) Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext 上下文)SendEx.Startup+<>c+ d.MoveNext() 中 启动.cs + 等待下一个(); Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext 语境) Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext http上下文) Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext http上下文) Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文)
当我删除 RedirectToAction() 并将其替换为 return Page() 时;页面加载。这意味着区域重定向不起作用?
仅使用一条路线。尝试如下:-
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces:new[] {"MVCDemo.Controllers"}
);
return RedirectToAction("Index", "Messages", new { area = "Action" });
这将有一个类似
Messages/Index/Action
的路线,所以请检查你想要什么以及它是否与参数一致。
如果您只需要
Message/
或仅 Index/
,请为此创建新的路由配置。