2013-05-06 35 views
1

我感到困惑RedirectResult的行爲 - 在某些情況下(HTTPS),重定向似乎並沒有發生,但更像是轉移的東西。ASP.NET:回國後RedirectResult,URL不會在瀏覽器更新時將HTTPS使用

如果用戶試圖不被記錄在訪問內部頁面,他們將被定向到登錄頁面。登錄後,他們直接回我的應用程序,查詢字符串參數

schema://host:port/myApp?returnUrl=Inspections.mvc/Edit/43523 

在HomeController中的代碼來處理這看起來對的redirectUrl,並做到這一點:

 if (returnUrl != null) 
     { 
      return Redirect(returnUrl);     
     } 

在我dev環境和一個QA環境,我發現重定向響應會返回到瀏覽器,如預期的那樣,會發出另一個請求。

但在生產和另一QA環境(它們都使用HTTPS),最後重定向不會發生。瀏覽器將繼續顯示URL

schema://host:port/myApp?returnUrl=Inspections.mvc/Edit/43523 

,並顯示將由頁Inspections.mvc /編輯/ 43523返回的內容。

我困惑 - 是當使用RedirectResult這種預期的行爲? https有關的區別?

編輯:檢查流量,我看到,在環境中使用HTTPS有一個重定向(301-永久移動),但它是回一模一樣的地址:

schema://host:port/myApp?returnUrl=Inspections.mvc/Edit/43523 

這些額外的信息離開像以前一樣令人迷惑的神祕。

回答

0

縱觀source code of RedirectResult類,你可以看到,它應該做的無論是302還是301取決於你想要的那種重定向:

 

public override void ExecuteResult(ControllerContext context) 
{ 
    if (context == null) 
    { 
     throw new ArgumentNullException("context"); 
    } 
    if (context.IsChildAction) 
    { 
     throw new InvalidOperationException(MvcResources.RedirectAction_CannotRedirectInChildAction); 
    } 

    string destinationUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext); 
    context.Controller.TempData.Keep(); 

    if (Permanent) 
    { 
     context.HttpContext.Response.RedirectPermanent(destinationUrl, endResponse: false); 
    } 
    else 
    { 
     context.HttpContext.Response.Redirect(destinationUrl, endResponse: false); 
    } 
} 
 

因爲不管你用的是什麼模式預計這應該是工作。您是否使用http嗅探器(例如Fiddler)查看實際請求/響應?

也許你的瀏覽器選擇不更新某些原因,URL和問題不在於實際的重定向/重寫。

+0

你的描述匹配什麼,我認爲它應該做的。我確實使用了帶有http的Fiddler(和使用https的LiveHeaders),並且在後一種情況下,重定向回到同一個URL。神祕。 – 2013-05-07 04:17:47

+0

你有沒有任何一種反向代理或你和應用程序之間的其他任何東西? – tucaz 2013-05-07 16:04:59

相關問題