2017-03-15 76 views
1

我明白,要改變URL [授權]帶你到。你有在web.config中編輯這行如何改變使用[授權]時的重定向

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

如果我有網頁的兩種跡象,我希望人們從重定向一個控制器到URL/F /登入人們從另一個控制器/ S /簽到?

+0

在一個額外的重定向的成本,最簡單的方法我能想到的解決這個的將會是用一個動作來替換'loginUrl',這個動作決定了用戶在哪個類別,然後將它們重定向到合適的登錄操作。 – spender

+0

您需要將'returnUrl'作爲重定向操作的字符串參數(即'loginUrl'指向的操作)。初始認證重定向將在查詢字符串中提供此值。您可以對其進行逆向工程,以發現用戶來自哪裏。 – spender

+0

如何將字符串參數傳遞給web.config? – Newbie

回答

1

您可以將loginUrl指向適當重定向用戶的操作。

這將是這個樣子:

public class MySpecialLoginController:Controller 
{ 
    public ActionResult Index(string returnUrl) 
    { 
     if(returnUrl.EndsWith("/foo")) //dirty. you could do better... 
     { 
      return RedirectToAction("signin","f"); 
     } 
     //etc 
    } 
} 

,並假設默認路由,loginUrl將具有價值"~/MySpecialLogin"

+0

當aspnet auth決定用戶沒有訪問頁面(假設它是'foo/bar')時,它發出一個重定向到'loginUrl'的查詢字符串,如'?returnUrl = foo% 2fbar「,這樣在你登錄後,你可以返回到你來的地方。簡而言之,它會自動填充。 – spender

+0

嗯似乎應該工作,但它不是?我在f控制器中做了一個名爲Redirector(string ReturnUrl)的動作,我在那裏放了一個斷點,但是即使這個URL顯示在/ f/Redirector中也沒有進入?ReturnUrl =%2fF%2fprofileperson%3fid%3d21&id = 21 – Newbie

+0

沒關係沒有工作,因爲我使用的是httppost。很棒!謝謝 – Newbie