【问题标题】:How to redirect to a Controller/Action passing any URL parameters?如何重定向到传递任何 URL 参数的控制器/操作?
【发布时间】:2020-11-04 11:52:34
【问题描述】:

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

流程是这样的:

  1. 用户已将 URL https://localhost:44358/Secure/VisualizationFiles?viz=vizFilePlays 加入书签
  2. 网站检查他们是否已登录,如果未登录,则将他们重定向到 Home 控制器的 Login 操作以登录(通过 returnUrl)
  3. 登录后,用户被重定向到上面最初请求的 URL,包括任何 URL 参数

目前 Secure 控制器方法使用ActionFilterAttribute 拦截传入的 HTTP 请求并确保控制器;动作和参数作为 returnUrl 传递(或 reRoute 在这种情况下)

public class NimsAuthenticationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
         var url = filterContext.RouteData.Values["Controller"] + "/" + filterContext.RouteData.Values["Action"] + "?" + QueryString(filterContext.ActionArguments);
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" }, { "reRoute", url } });

        base.OnActionExecuting(filterContext);
    }

    private string QueryString(IDictionary<string, object> dict)
    {
        var list = new List<string>();
        foreach (var item in dict)
        {
            list.Add(item.Key + "=" + item.Value);
        }

        return string.Join("&", list);

    }

}

在用户被重定向(从安全控制器)到 Home 控制器后,我们会传递完整的returnUrl(即reRoute URL)

如您所见,现在我正在做一些容易出错的字符串操作来提取Controller; Actionurl params 来自 reRoute 字符串。我想知道:

  • 有没有办法可以将整个reRoute url 传递给Redirect
  • 如果上述方法不可行,是否有另一种方法来处理重定向,使其成为动态的(即 url 参数以及控制器和操作将不同)

【问题讨论】:

  • 当您使用Redirect(而不是RedirectToAction)和reRoute 作为参数时会发生什么?
  • 我确实尝试过,但这使得我试图重定向到同一个控制器中的操作的 aspnetcore 东西 - https://localhost:44358/Home/Secure/VisualizationFiles?viz=vizFilePlays
  • 你能试试return Redirect("/" + reRoute);吗? / 应该使它使用根 url。
  • @JayFridge 成功了! :D 我不敢相信它是如此简单。非常感谢!请添加为答案,我将接受您的评论作为解决方案。

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


【解决方案1】:

您可以使用Redirect 方法代替RedirectToAction

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

return Redirect("/" + reRoute);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多