回答
這是表單身份驗證的性質。 (即時猜測你正在使用)。
也就是說,當您訪問需要認證的頁面時,ASP.NET會將您重定向到登錄頁面,並將ReturnUrl作爲參數傳入,以便您可以返回到您登錄後發送的頁面。
要刪除此功能將破壞窗體身份驗證本身的語義和設計。 (IMO)
我的建議 - 如果你不需要它,不使用它。
我試圖將用戶重定向到一個 靜態頁面登錄後做一些 選擇。
一塊蛋糕 - 你做你的登錄,而不是做FormsAuthentication.RedirectFromLoginPage(它使用非常RETURNURL查詢參數)後,只需使用FormsAuthentication.SetAuthCookie和重定向,無論你想。
由於RPM1984指出的那樣,你不必在登錄後用戶到指定的URL重定向。
如果它是你必須刪除ReturnUrl
查詢參數有幾個選項。可能最簡單的方法是在您的登錄網頁/控制器中檢查Request.QueryStrings
集合中是否存在ReturnUrl
參數。如果存在,您可以重新定向回登錄頁面,但不包含ReturnUrl
。
另一種選擇是爲FormsAuthenticationModule
創建自定義實現,FormsAuthenticationModule
是根據表單身份驗證票據對用戶進行身份驗證並負責將未經授權的用戶重定向到登錄頁面的類。不幸的是,FormsAuthenticationModule
類的方法不是虛擬的,所以你不能創建派生類並重寫所需的方法,但好消息是這個類非常簡單 - 總共只有100-200行代碼,並且使用Reflector可以快速創建您自己的自定義FormsAuthenticationModule
類。如果你走這條路線(我不建議這樣做),那麼你需要做的就是去掉OnLeave
方法中的代碼,該方法的參數爲ReturnUrl
。 (除了修改這個類以外,還需要配置Web.config文件,以便應用程序使用您的自定義FormsAuthenticationModule
類而不是.NET Framework中的類。)
快樂編程!
創建自定義授權屬性
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();
}
我更喜歡這個解決方案,但我相信在'HandleUnauthorizedRequest'中使用代碼更有意義,並使用此行代替'filterContext.Result = new RedirectResult(FormsAuthentication.LoginUrl);' – 2013-07-04 19:09:58
上的位置標記添加到您的web.config
。如果您的頁面位於子目錄中,請將web.config
添加到子目錄中。
<location path="ForgotPassword.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
ASP將忽略添加ReturnUrl
查詢字符串並指示登錄。
哇,我有這個問題看這裏http ://stackoverflow.com/questions/19301787/asp-net-links-wont-redirect-to-the-right-page 感謝它幫助我,我們有相同的頁面名稱:) – meda 2013-10-10 17:59:16
將此添加到您的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);
}
http:// stackoverflow。 com/questions/13394999/form-authentication-and-url-rewriting我正在使用自定義窗體身份驗證。如果我使用你已經給出了控制循環的代碼,它說 - 「太多的重定向」。我認爲問題是,當Control進入像'mywebsite.com/Login'這樣的'Login'頁面時,它會檢查身份驗證並重定向到Login.aspx頁面。並且您的代碼再次重定向到「登錄」頁面。這個循環繼續。你能幫助我嗎? – 2012-11-15 11:15:27
我們不需要在MvcApplication構造函數中使用':base()'嗎? – Roberto 2016-04-14 22:19:47
如果您未滿行爲部分使用asp.net控制loginstatus然後在登錄狀態控制按F4(房產),我們可以看到LogOutAction有選擇返回到登錄頁面。
注:爲了成功地實現它,你必須有名稱的login.aspx
它被稱爲「重定向到登錄頁面」(在標記中它是LogoutAction =「RedirectToLoginPage」) – 2016-06-22 16:00:47
簡單的登錄頁面...
[AllowAnonymous]
public ActionResult Login() { return View(); }
[AllowAnonymous]
public ActionResult LoginRedirect(){ return RedirectToAction("Login"); }
Webconfig
<authentication mode="Forms">
<forms loginUrl="~/Account/LoginRedirect" timeout="2880" />
</authentication>
在我的情況下,我必須更改startup.auth.cs中的路徑而不是web配置中: 'app.UseCookieAuthentication CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LOGINPATH =新PathString(( 「/帳號/ LoginRedirect」)), ...' 我也用RedirectToActionPermanent而不是RedirectToAction,因爲它是pernament – 2014-12-29 00:42:01
這是一個很好的解決方案 - 唯一需要注意的是,您將在瀏覽器歷史記錄中向LoginRedirect發出請求,因此如果有人點擊「返回」按鈕一次,則會將其返回到LoginRedirect,然後再返回到登錄。 – Jim 2015-12-01 20:15:26
protected void LoginControl_LoggedIn(object sender, EventArgs e)
{
Response.Redirect("~/selection.aspx");
}
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
我會把這在Page.Init事件 - 很明顯,你將需要改變「/default.aspx」,以配合您的登錄頁面的URL 。
如果要從請求中刪除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
- 1. 如何刪除amp;從URL
- 2. 如何刪除域=從URL
- 3. IE:哈希值在ReturnUrl中刪除
- 4. 如何從Orchard URL中刪除OrchardLocal?
- 5. 如何從url中刪除index.php/html
- 6. 如何從url angular2中刪除端口?
- 7. 如何從vue-router URL中刪除hashtag(#)?
- 8. .htaccess,如何從url中刪除模式?
- 9. 如何使用htaccess從URL中刪除//
- 10. 如何從url中刪除id -jquery
- 11. 如何從MediaWiki的URL中刪除index.php?
- 12. 如何從CodeIgniter的URL中刪除index.php?
- 13. 如何從url中刪除參數
- 14. 如何從url中刪除anynamefile.php?
- 15. 如何從URL中刪除JSESSION ID
- 16. Codeigniter 3.1.6 - 如何從url中刪除index.php
- 17. 如何從URL中刪除反斜槓?
- 18. CodeIgniter:如何從URL中刪除消息?
- 19. 如何從PHP中刪除index.php URL
- 20. 如何從URL中刪除index.php
- 21. 如何從url中刪除System.Web.Mvc.UrlParameter
- 22. AngularJS - 如何從URL中刪除索引
- 23. 如何刪除?佈局=從URL中
- 24. 如何從URL中刪除index.php?
- 25. 如何從URL中刪除backpath/parentpath?
- 26. 如何從URL中刪除#name?
- 27. 如何從URL中刪除字符串?
- 28. 如何從URL中刪除8080
- 29. 如何從URL中刪除子目錄?
- 30. 如何從CodeIgniter的URL中刪除'index.php'?
FormsAuthentication.SetAuthCookie是我在做什麼正確的now.I只是想從地址欄將其刪除。 – 2010-09-15 19:57:11
然後,我的第一條評論就是說 - 你完全可以不使用表單身份驗證。沒有簡單的方法來做到這一點(我知道)。記住ANY頁面可以重定向到登錄頁面(並且ASP.NET執行此操作)。我唯一能想到的方式是掛鉤Global.asax事件並重寫URL。爲什麼你在乎網址是否在那裏? – RPM1984 2010-09-15 21:58:34
,並且該評論與您的評論相矛盾「因爲我試圖在登錄後將用戶重定向到靜態頁面以進行一些選擇。」 ReturnURL不會阻止您在登錄後執行您自己的重定向,除非您使用RedirectFromLoginPage,而您已經說過您並不是。所以我不知道你是什麼問題。 ReturnUrl如何阻止您進行重定向? – RPM1984 2010-09-15 21:59:34