重定向到ASP CORE中的URL

Rid*_*k12 3 c# asp.net asp.net-web-api angularjs asp.net-core

我有重定向到另一个控制器和应用程序中的操作的问题.

我的重定向操作看起来像:

    public IActionResult Redirect(NotificationItemViewModel model)
    {
        NotificationItemToggleReadCommand command = new NotificationItemToggleReadCommand();
        command.Id = new EntityId(model.Id);
        command.MarkAsRead = true;


        var result = CommandProcessor.Run(command);
        RedirectResult redirectResult = new RedirectResult(model.Subject.Url,true);
        return redirectResult;
    }
Run Code Online (Sandbox Code Playgroud)

我的model.Subject.Url例如是这种格式: Identity/User#/Details/b868b08c-b3ba-4f45-a7b6-deb02440d42f

它是区域/控制器/动作/ id.问题是我的RedirectResult将我重定向到:

notifications/Identity/User#/Details/b868b08c-b3ba-4f45-a7b6-deb02440d42f 
Run Code Online (Sandbox Code Playgroud)

并且该路由不存在(controller/area/controller/action/id)如何强制此重定向切断第一个控制器名称?

我的路线:

    app.UseMvc(routes =>
        {
            routes.MapRoute("areaRoute", "{area:exists}/{controller}/{action=Index}/{id?}");

            routes.MapRoute(
                name: "controllerActionRoute",
                template: "{controller}/{action}",
                defaults: new { controller = "Home", action = "Index" },
                constraints: null,
                dataTokens: new { NameSpace = "default" });

            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
Run Code Online (Sandbox Code Playgroud)

感谢帮助.

dot*_*tep 6

如果我正确理解您的问题,那是因为您在通知区域(其他一些区域)并尝试移出该区域.

为此你可以做以下任何事情.

  1. 请不要提供相对网址,请在RedirectResult中提供绝对网址.现在的问题是,当应用程序火重定向时,它会考虑相对URL,这就是问题.

  2. 第二种解决方案是使用RedirectToActionResult而不是RedirectResult.

     RedirectToActionResult redirectResult = new RedirectToActionResult("Details", "User", new { @area = "Identity", @Id = "b868b08c-b3ba-4f45-a7b6-deb02440d42f" });
     return redirectResult;  
    
    Run Code Online (Sandbox Code Playgroud)

在上面我假设区域名称是"Identity",控制器名称是"User",action是"Details".Acition有一个名称为"Id"的参数.您可以根据自己的要求进行更改.在此,您不必构造绝对URL.

更新1

如果我认为你总是必须做root并在开始时忽略"通知".

至少你可以像这样提供Url.

~/Identity/User#/Details/b868b08c-b3ba-4f45-a7b6-deb02440d42f
Run Code Online (Sandbox Code Playgroud)