C# 如何重定向到传递URL参数的控制器/操作?

C# 如何重定向到传递URL参数的控制器/操作?,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我试图在我的aspnetcore应用程序中实现“returnUrl”功能,但我正在努力寻找一种方法来动态地将参数传递给操作 流程如下所示: return Redirect("/" + reRoute); 用户已将URLhttps://localhost:44358/Secure/VisualizationFiles?viz=vizFilePlays 网站检查他们是否已登录,如果未登录,则将他们重定向到主页控制器的登录操作以登录(传递返回URL) 登录后,用户将重定向到上面

我试图在我的aspnetcore应用程序中实现“returnUrl”功能,但我正在努力寻找一种方法来动态地将参数传递给操作

流程如下所示:

return Redirect("/" + reRoute);

  • 用户已将URL
    https://localhost:44358/Secure/VisualizationFiles?viz=vizFilePlays
  • 网站检查他们是否已登录,如果未登录,则将他们重定向到主页控制器的
    登录
    操作以登录(传递返回URL)
  • 登录后,用户将重定向到上面最初请求的URL,包括任何URL参数
  • 现在,Secure控制器方法使用
    actionfilteratAttribute
    拦截传入的HTTP请求并确保控制器安全;操作和参数作为returnUrl传递(或者在这种情况下为
    reRoute

    公共类NimsAuthenticationAttribute:ActionFilterAttribute
    {
    公共覆盖无效OnActionExecuting(ActionExecutingContext filterContext)
    {
    变量url=filterContext.RoutedData.Values[“Controller”]+“/”+filterContext.RoutedData.Values[“Action”]+“?”+QueryString(filterContext.ActionArguments);
    filterContext.Result=新的RedirectToRouteResult(新的RouteValueDictionary{{{“控制器”,“主页”},{“操作”,“索引”},{“重新路由”,url});
    base.OnActionExecuting(filterContext);
    }
    专用字符串查询字符串(IDictionary dict)
    {
    var list=新列表();
    foreach(dict中的var项目)
    {
    列表.添加(item.Key+“=”+item.Value);
    }
    返回字符串。Join(“&”,list);
    }
    }
    
    在用户被重定向(从安全控制器)到控制器后,我们将获得传递的完整
    returnUrl
    (即
    重新路由
    URL)

    正如您所看到的,现在我正在做一些容易出错的字符串操作来提取
    控制器
    <代码>操作和
    url参数
    来自
    重路由
    字符串。我想知道:

    • 有什么方法可以将整个
      重新路由
      url传递到
      重定向
    • 如果上述方法不可行,是否有其他方法处理重定向,使其成为动态的(即url参数以及控制器和操作将不同)
    您可以使用该方法,而不是
    重定向到操作

    所以在你的情况下,它看起来是这样的:

    return Redirect("/" + reRoute);
    

    /
    可以转到根url,否则请求将相对于当前控制器进行路由。

    使用时会发生什么情况(而不是
    重定向到操作
    )使用
    重新路由
    作为参数?我确实尝试过,但这使aspnetcore成为我试图重定向到同一控制器中操作的对象-
    https://localhost:44358/Home/Secure/VisualizationFiles?viz=vizFilePlays
    您可以尝试
    返回重定向(“/”+重新路由)
    /
    应使其使用根url。@jayBridge有效!:我不敢相信事情会这么简单。非常感谢你!请添加作为答案,我将接受您的意见作为解决方案。