.net core 重定向到路由结果将 %2f 添加到 url

Jia*_*nYA 4 c# asp.net-core-mvc asp.net-core

这是我的路由项目:

context.Result = new RedirectToRouteResult(new RouteValueDictionary(new {area="Identity", controller = "Account / Login", action = "Index" }));
Run Code Online (Sandbox Code Playgroud)

当应用程序启动时,这就是我在 url 中得到的内容:

http://localhost:62527/Identity/Account%2FLogin

如何从我的网址中删除 %2f?

Kir*_*kin 5

当尝试从 生成 URL 时RouteValueDictionary,ASP.NET Core 会将 编码为/,因为它是URL 段%2F的一部分并且具有特殊含义(它是段分隔符)。

Account/Login在此上下文中作为控制器名称无效,只是因为作为C# 标识符的一部分无效(即作为类名称无效)/Accounts/LoginController

当您尝试路由到Account/LoginIdentity区域时,我现在假设您正在使用 ASP.NET Core Identity 的默认 UI,并且您的意图是路由到默认区域中的/Account/Login Razor 页面Identity。为了做到这一点,至少有几个选择:

  1. 设置page路由值而不是controller路由值:

    context.Result = new RedirectToRouteResult(
        new RouteValueDictionary(new { area = "Identity", page = "/Account/Login" }));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用RedirectToPageResult而不是RedirectToRouteResult

    context.Result = new RedirectToPageResult("/Account/Login", new { area = "Identity" });
    
    Run Code Online (Sandbox Code Playgroud)

我建议在此处使用该RedirectToPageResult选项,因为它有一个更明确的意图:这是针对 Razor 页面而不是 MVC 控制器。