Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Это характер Аутентификации форм. (которые я предполагаю, что вы используете).

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

Чтобы удалить эту функциональность, вы нарушите семантику и дизайн самой аутентификации форм. (ИМО)

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

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

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

Ответ 2

Добавьте это в свой файл Global.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

Создайте настраиваемый атрибут авторизации

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

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

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

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

Счастливое программирование!

Ответ 5

Простой...

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

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

WebConfig

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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 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");

Ответ 9

Вы можете использовать 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

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

Ответ 10

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

Ответ 11

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