2014-10-17 83 views
0

自昨天起,我在這個問題上掙扎。我正在研究一個包含電子郵件服務的Web應用程序。電子郵件包括'鏈接'到該應用程序的某個頁面。在ASP.Net中重寫網址MVC

現在:我有2個場景:

1)如果用戶登錄(應用程序)已經和他打 他在他的電子郵件得到的網址,鏈接將完全打開。

2)如果用戶登錄(應用程序),那麼URL 不會打開並且會自動重定向到登錄頁面,在BaseController加入 功能。

*

現在我想的是,當用戶敲擊網址後登錄和 成功登錄用戶得到重定向到 電子郵件提供的鏈接。

*

爲如:如果用戶得到一個電子郵件給僱員的詳細信息頁面,於是就成功登錄的用戶得到重定向到員工的詳細信息頁面。

類似於將redirecturl添加到登錄頁面。

我認爲重寫網址是我應該做的。

但我不知道如何在這種情況下使用它,幫助我。

+0

你只需要堅持returnUrl跨越請求,它應該與小改變工作。請參閱下面的答案。 – SBirthare 2014-10-17 08:15:51

回答

0

ASP.NET MVC 5附帶的默認項目模板的行爲與您描述的完全相同。

如果你想重定向到一個自定義登錄網址,重新配置CookieAuthenticationOptions的LOGINPATH屬性對象

LoginPath = new PathString("/Account/Login") 

在這是在Startup.Auth.cs類完成的默認模板。

注意:如果您使用的是舊版本的ASP.NET MVC,則默認項目模板的行爲方式相同。但是,以前這被使用窗體身份驗證,所以爲了重定向到一個自定義登錄網址,那麼你就必須設置的<形式loginUrl屬性實現>在Web.config文件標籤

+0

M在asp.net mvc 4.5應用程序上工作,它不提供任何startup.auth.cs類。我現在應該怎麼做? – Vishal 2014-10-17 07:49:46

+0

查看默認項目模板。 >新建項目 - - > ASP.NET Web應用程序 然後確保選擇了「MVC」的模板,而不是「空」模板 – 2014-10-17 07:51:19

+0

我 您可以通過在Visual Studio 2013 文件開始一個新項目查看此我正在使用vs2012,並且它沒有提供任何默認模板,就像您建議的那樣 – Vishal 2014-10-17 07:52:40

0
  1. 默認情況下,如果用戶在未經授權時嘗試訪問授權頁面時會自動將其重定向到登錄頁面或在web.config文件中爲該元素配置的頁面。您可以看到查詢字符串returnUrl具有最初試圖訪問的URL,並將其附加到URL中的日誌中。
  2. 要訪問返回URL,請包含一個新參數作爲returnUrl,並將模型數據中的返回URL保留在隱藏字段中,以便在回發時訪問以進行重定向。
  3. 如果用戶已通過身份驗證,則在回發後將用戶重定向到指定的頁面。
+0

,您可以在Web.config文件中設置標記的loginUrl屬性。實際上,該鏈接不會附加在查詢字符串 – Vishal 2014-10-17 07:51:05

+0

@Farzi中。您是否使用自定義授權屬性,否則創建它並在OnActionExecuting方法中檢查用戶是否已通過身份驗證。如果通過身份驗證,則不進行任何操作,然後獲取URL引用,並將用戶重定向到登錄頁面,並提供帶有引用URL的查詢字符串returnUrl。此外,還要驗證引薦來源網址的唯一身份。您可以使用全局註冊此過濾器。然後,您可以按照我在我的回答中所建議的步驟進行操作。 – Venkat 2014-10-17 08:06:07

0

我不記得確切,但一個月前幾個我實現類似的功能,我不得不救RETURNURL明確(由於MVC錯誤或東西) - 轉寄此link

AccountController.cs - 快照

 [HttpGet] 
     [AllowAnonymous] 
     public ActionResult Login(string returnUrl, string userName) 
     { 
      // You login method logic.... 

      // Add this line to save the returnUrl value 
      ViewBag.ReturnUrl = returnUrl;  
     } 

Login.cshtml - 快照

@using (Html.BeginForm("Login", "Account", FormMethod.Post ,new {ReturnUrl = ViewBag.ReturnUrl})) 
{ 
    <input type="hidden" name="ReturnUrl" value="@Request.QueryString["ReturnUrl"]" /> 

// .....    
} 

看看這是否有助於你的情況。