Как удалить returnurl из url?

Я хочу удалить "returnurl= / blabla"из адресной строки, когда пользователь хочет получить доступ к требуемой странице входа. Потому что я пытаюсь перенаправить пользователя на статическую страницу после входа в систему, чтобы сделать некоторые выборы.

Как я могу это сделать?

11 ответов


такова природа Проверка Подлинности С Помощью Форм. (который я предполагаю, что вы используете).

то есть, когда вы получаете доступ к странице, которая требует аутентификации, ASP.NET перенаправит вас на страницу входа в систему, передавая ReturnUrl в качестве параметра, чтобы вы могли вернуться на страницу, с которой Вы пришли после входа в систему.

чтобы удалить эту функциональность, нарушит семантику и дизайн самой аутентификации форм. (IMO)

мое предложение - если вы не нужно,Не используйте его.

Я пытаюсь перенаправить пользователя на статические страницы после входа в систему, чтобы сделать некоторые отборочный этап.

кусок пирога - после того как вы сделали свой логин, вместо того, чтобы делать FormsAuthentication.RedirectFromLoginPage (который использует этот самый параметр Returnurl QueryString), просто используйте FormsAuthentication.SetAuthCookie и перенаправить туда, куда вы хотите.


добавьте это в свой глобальный.файл 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 );

  }

создайте пользовательский атрибут авторизации

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();
}

как указал RPM1984, вам не нужно перенаправлять пользователя на указанный URL-адрес после входа в систему.

если необходимо удалить ReturnUrl параметр querystring есть несколько вариантов. Вероятно, самый простой в вашей веб-странице входа / контроллере, который вы проверите на наличие на Request.QueryStrings коллекция. Если он существует, вы можете сделать перенаправление обратно на страницу входа в систему, но без ReturnUrl.

другой вариант be для создания пользовательской реализации для FormsAuthenticationModule, который является классом, который обрабатывает аутентификацию пользователя на основе их билета аутентификации формы и отвечает за перенаправление неавторизованных пользователей на страницу входа. К сожалению,FormsAuthenticationModule методы класса не являются виртуальными, поэтому вы не можете создать производный класс и переопределить необходимые методы, но хорошей новостью является то, что класс довольно прост - возможно, всего 100-200 строк кода, и с помощью Reflector вы можете быстро создать свой собственный FormsAuthenticationModule класса. Если вы пойдете по этому маршруту (что я бы не рекомендовал), все, что вам нужно будет сделать, это вынуть код в OnLeave метод, который привязывает . (В дополнение к изменению этого класса вам также необходимо настроить свой веб-сайт.файл конфигурации, чтобы ваше приложение использовало ваш пользовательский FormsAuthenticationModule класса, а не один .Чистые рамки.)

Счастливого Программирования!


простой...

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

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

Webconfig

<authentication mode="Forms">
    <forms loginUrl="~/Account/LoginRedirect" timeout="2880" />
</authentication>

добавьте тег местоположения в свой web.config. Если ваша страница находится в подкаталоге, добавьте web.config в поддиректории.

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

ASP пропустит добавление ReturnUrl querystring и направление для входа в систему.


Если вы используете asp.net управление loginstatus затем нажмите на login status control нажмите f4 (для свойств) в разделе Поведение мы можем увидеть LogOutAction там выберите Return to Login page.

Примечание: Для того, чтобы реализовать его успешно, вы должны иметь страницу входа с именем входа.аспн


Если вы хотите удалить 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_Load из моего логина класса.аспн.cs


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");

вы можете использовать HttpUtility.ParseQueryString для удаления этого элемента. Если вы используете VB.NET тогда этот код делает это

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

Я бы поместил это на странице.Init event-очевидно, вам нужно будет изменить " / default.aspx", чтобы соответствовать URL вашей страницы входа в систему.


protected void LoginControl_LoggedIn(object sender, EventArgs e)
{
  Response.Redirect("~/selection.aspx");
}