2014-04-25 32 views
2

我想在用戶第一次加載網站時做一個簡單的重定向。 對於這一點,我只是訪問的RouteData上BaseController的BeginExecuteCore()方法,如果URL沒有一個特定的值,那麼我會重定向到另一個https routeMVC重定向錯誤:服務器無法在發送HTTP標頭後附加標頭

public class BaseController : Controller 
    { 
     protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) 
     { 
      // access route data 

      if (condition == true) 
       Response.Redirect(string.Format("https://{0}/en/en", Request.Url.Authority), true); 
      } 
     } 
    } 

一些事實:

  1. 我實現我想要的結果
  2. 我得到異常「服務器不能在發送HTTP頭後追加頭。」
  3. 我試過幾種選擇:使用其他方法做重定向像Initialize(RequestContext requestContext)
  4. 我嘗試對重定向方法使用參數EndResponse=true
  5. 我試着做重定向
  6. 在所有之前清除頭之前的實驗我
  7. 我使用MVC 5

我的問題一樣異常: 我怎樣才能以最有效的方式將用戶重定向到另一條路線,因爲我知道我需要訪問RouteData並且不會引發惱人的異常?

謝謝!

回答

0

我不會和方法BeginExecuteCore(),因爲我仍然MVC 3和4

工作在MVC 4我會用行動過濾器的頁面加載之前,檢查一番familiair。

您看到該錯誤的原因可能是因爲在頁面已被加載時,您將重定向用戶。

public class LogActionFilter : ActionFilterAttribute 
    { 
      public override void OnActionExecuting(ActionExecutingContext filterContext) 
      { 
       if (condition == true) 
       filterContext.Response.Redirect(string.Format("https://{0}/en/en", Request.Url.Authority), true); 
      }  
    } 

看看:http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs

+0

遺憾的是它沒有。我得到了同樣的例外。 以下是我所做的事(確保我沒有任何不應該的東西) 1。我適應你的方法,因爲在路上的一些變化filterContext暴露Request和Response(它的工作,我能找回我所需要的信息) 2.裝飾BaseController與[LogActionFilter] – sergiommaria

+0

3.也試過裝飾的HomeController代替BaseController沒有成功.. 這段代碼是以前的代碼我有叫後,所以我想嘗試將用戶重定向的概率時,頁面被加載高 – sergiommaria

0

Response.Redirect(anyUrl)原因302狀態代碼 而Html.AntiForgeryToken()與正常302狀態代碼衝突。

你可以把下面的代碼Application_Start

AntiForgeryConfig.SuppressXFrameOptionsHeader = true; 

安全警告:SuppressXFrameOptionsHeader =true可以防止您的 網站被加載到一個iframe。

read more

相關問題