代码之家  ›  专栏  ›  技术社区  ›  Ali Ersöz

如何从url中删除returnurl?

  •  35
  • Ali Ersöz  · 技术社区  · 14 年前

    我该怎么做?

    11 回复  |  直到 14 年前
        1
  •  22
  •   RPM1984    14 年前

    窗体身份验证

    删除此功能将破坏表单身份验证本身的语义和设计。(海事组织)

    我的建议-如果你不需要, 别用它

    我正在尝试将用户重定向到 登录后做一些静态页面 选择。

    小菜一碟-在你完成你的登录,而不是 (它使用了ReturnUrl QueryString参数),只需使用 你想去哪里就去哪里。

        2
  •  14
  •   William Humphreys    12 年前

    将此添加到您的全球.asax文件。

    public class MvcApplication : HttpApplication {
    
      private const String ReturnUrlRegexPattern = @"\?ReturnUrl=.*$";
    
      public MvcApplication() {
    
        PreSendRequestHeaders += MvcApplicationOnPreSendRequestHeaders;
    
      }
    
      private void MvcApplicationOnPreSendRequestHeaders( object sender, EventArgs e ) {
    
        String redirectUrl = Response.RedirectLocation;
    
        if ( String.IsNullOrEmpty(redirectUrl) 
             || !Regex.IsMatch( redirectUrl, ReturnUrlRegexPattern ) ) {
    
          return;
    
        }
    
        Response.RedirectLocation = Regex.Replace( redirectUrl, 
                                                   ReturnUrlRegexPattern, 
                                                   String.Empty );
    
      }
    
        3
  •  11
  •   Aivan Monceller    13 年前

    创建自定义授权属性

    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(
                            AuthorizationContext filterContext)
        {
            if (filterContext == null)
            {
                throw new ArgumentNullException("filterContext");
            }
    
            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                string loginUrl = "/"; // Default Login Url 
                filterContext.Result = new RedirectResult(loginUrl);
            }
        }
    }
    

    然后在你的控制器上使用它

    [CustomAuthorizeAttribute]
    public ActionResult Login()
    {
    
    
        return View();
    }
    
        4
  •  9
  •   Carlos Candeias    10 年前

    [AllowAnonymous]
    public ActionResult Login() { return View(); }
    
    [AllowAnonymous]
    public ActionResult LoginRedirect(){ return RedirectToAction("Login"); }
    

    网络配置

    <authentication mode="Forms">
        <forms loginUrl="~/Account/LoginRedirect" timeout="2880" />
    </authentication>
    
        5
  •  8
  •   Scott Mitchell    14 年前

    如果您必须移除 ReturnUrl querystring参数有几个选项。可能最简单的方法是在登录网页/控制器中检查是否存在 返回URL 中的参数 Request.QueryStrings 收藏。如果它存在,您可以重定向回登录页,但不需要

    FormsAuthenticationModule 窗体身份验证模块 窗体身份验证模块 班级。如果你走这条路(我不推荐),你所需要做的就是取出 OnLeave 返回URL 参数。(除了修改这个类之外,还需要配置Web.config文件文件,以便应用程序使用自定义 窗体身份验证模块 类而不是.NET Framework中的类。)

    快乐编程!

        6
  •  3
  •   Spooky Muscothym    9 年前

    web.config . 如果页面位于子目录中,请添加 web.config文件 到子目录。

    <location path="ForgotPassword.aspx">
        <system.web>
            <authorization>
                <allow users="*"/>
            </authorization>
        </system.web>
    </location>
    

    ReturnUrl 查询并指向登录。

        7
  •  2
  •   Malachi user1400290    9 年前

        8
  •  2
  •   Alberto Delgadillo    7 年前

    如果要从请求中删除returnURL并重定向到特定路径,可以按照以下步骤操作。

    首先获取当前上下文,验证用户是否经过身份验证,最后重定向当前路径。

      HttpContext context = HttpContext.Current;
            //verify if the user is not authenticated
            if (!context.User.Identity.IsAuthenticated)
            {
                //verify if the URL contains  ReturnUrl   
                if (context.Request.Url.ToString().Contains("ReturnUrl"))
                {
                    //redirect the current path
                    HttpContext.Current.Response.Redirect("~/login.aspx");
                }
    
            }
    

    我把这段代码放进了我的类的Page\u Load方法中登录.aspx.cs

        9
  •  1
  •   Adam    8 年前

    Dim nvcQuery As NameValueCollection
    Dim strQuery As String = ""
    
    If Not IsNothing(Request.QueryString("ReturnUrl")) Then
        If Request.QueryString("ReturnUrl").Length Then
            nvcQuery = HttpUtility.ParseQueryString(Request.QueryString.ToString)
            For Each strKey As String In nvcQuery.AllKeys
                If strKey <> "ReturnUrl" Then
                    If strQuery.Length Then strQuery += "&"
                    strQuery += strKey + "=" + nvcQuery(strKey)
                End If
            Next
            If strQuery.Length Then strQuery = "?" + strQuery
            If Request.CurrentExecutionFilePath <> "/default.aspx" Then
                Response.Redirect(Request.CurrentExecutionFilePath + strQuery)
            Else
                Response.Redirect("/" + strQuery)
            End If
            Response.Write(Server.HtmlEncode(strQuery))
        End If
    End If
    

    我会把这个放在起始页事件-显然你需要改变/默认.aspx“以匹配登录页的URL。

        10
  •  0
  •   Otto    8 年前
    void Application_BeginRequest(object s, EventArgs e)
    {
        // ................
    
        // strip return Return Url
        if (!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"])  && Request.Path.IndexOf("login.aspx")!=-1)
            System.Web.HttpContext.Current.Response.Redirect("~/login.aspx");