首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重定向到控制器/操作,传递任何URL参数?

如何重定向到控制器/操作,传递任何URL参数?
EN

Stack Overflow用户
提问于 2020-11-04 11:52:34
回答 1查看 1.3K关注 0票数 0

我正试图在我的aspnetcore应用程序中实现"returnUrl“功能,但我很难找到一种将参数动态传递给操作的方法。

流程流程如下:

  1. 用户有书签的URL https://localhost:44358/Secure/VisualizationFiles?viz=vizFilePlays
  2. 该网站检查是否已登录,如果没有,则将其重定向到Home控制器的Login操作以登录(传递returnUrl)。
  3. 在登录用户之后,将重定向到上面最初请求的URL,包括任何URL参数

现在,安全控制器方法使用ActionFilterAttribute,它拦截传入的HTTP请求并确保控制器;动作和参数作为returnUrl传递(在这种情况下为reRoute )。

代码语言:javascript
复制
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);

    }

}

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

正如您所看到的,现在我正在做一些容易出错的字符串处理,从ControllerActionurl params字符串中提取reRoute。我想知道:

  • 有没有办法把整个reRoute url传递给Redirect
  • 如果不可能,是否有其他方法来处理重定向,使其是动态的(即url参数将与Controller和Action不同)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-04 12:44:42

您可以使用重定向方法而不是RedirectToAction

所以在你的例子中,它看起来是这样的:

代码语言:javascript
复制
return Redirect("/" + reRoute);

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64679544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档