Как удалить 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");
}