Как удалить returnurl из url?
Я хочу удалить "returnurl =/blabla" из адресной строки, когда пользователь хочет получить доступ к требуемой странице входа. Потому что я пытаюсь перенаправить пользователя на статическую страницу после входа в систему, чтобы сделать некоторые выборы.
Как я могу это сделать?
Ответы
Ответ 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");
}