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

时间:2018-10-12 06:05:29

标签: c# asp.net-core asp.net-core-mvc

这是我的路由项目:

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

应用程序启动时,这是我在URL中得到的:

  

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

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

2 个答案:

答案 0 :(得分:4)

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

在这种情况下,

Account/Login作为控制器名称​​无效,仅仅是因为/作为C#标识符的一部分无效(即Accounts/LoginController无效)作为班级名称)。

当您尝试路由到Account/Login区域中的Identity时,我现在假设您正在使用ASP.NET Core Identity的Default UI,并且您正在目的是路由到默认/Account/Login区域中的Identity Razor Page 。为此,至少有两个选择:

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

    context.Result = new RedirectToRouteResult(
        new RouteValueDictionary(new { area = "Identity", page = "/Account/Login" }));
    
  2. 使用RedirectToPageResult代替RedirectToRouteResult

    context.Result = new RedirectToPageResult("/Account/Login", new { area = "Identity" });
    

我建议在这里使用RedirectToPageResult选项,因为它的意图很明确,即它是针对Razor Page而不是MVC Controller。

答案 1 :(得分:0)

在重定向之前,使用 HttpServerUtility UrlDecode (您的URL字符串)

相关问题