2017-03-06 51 views
1

我從事MVC5項目。內部控制如何在靜態方法中使用控制器類的Response屬性?

我已經登錄的操作方法:

public void Login(LoginViewModel model, string returnUrl) 
{ 
    string culture = getCulture(); 
    LocolizationCore.SetCulture(culture); 
} 

我也有我的名爲LocolizationCore項目類,它包含了一個名爲SetCulture靜態方法()。

這裏的外觀SetCulture()方法:

internal static void SetCulture(string culture) 
    { 
     // Validate input 
     culture = CultureHelper.GetImplementedCulture(culture); 

     // Save culture in a cookie 
     HttpCookie cookie = Request.Cookies["_culture"]; 
     if (cookie != null) 
      cookie.Value = culture; // update cookie value 
     else 
     { 
      cookie = new HttpCookie("_culture"); 
      cookie.Value = culture; 
      cookie.Expires = DateTime.Now.AddYears(1); 
     } 
     Response.Cookies.Add(cookie); 
    } 

正如你可以看到SetCulture方法是節約文化,用戶的cookie。

當我嘗試生成項目,我得到錯誤:

The name 'Request' does not exist in the current context  
The name 'Response' does not exist in the current context 

我的問題是如何在LocolizationCore類的靜態方法使用Response和Request屬性?

+0

你需要'HttpContext'在那個類中的引用,你有使用'System.Web.HttpContext'的語句嗎? –

回答

3

傳中,HttpContext到您的靜態方法SetCulture

internal static void SetCulture(HttpContextBase httpContext, string culture) 
{ 
    // use httpContext.Request or httpContext.Response here 
} 

通行證它是這樣的:

SetCulture(this.HttpContext, "culture") 

或者:

SetCulture(HttpContext.Current, "culture") 
+0

帕特里克,感謝後。但在此參數HttpContext.Current我得到這個錯誤: 'System.Web.HttpContextBase'不包含'當前'的定義和沒有擴展方法'當前'接受類型的第一個參數'System.Web.HttpContextBase'可以找到(你是否缺少使用指令或程序集引用?)\t 它似乎是當前屬性丟失。 – Michael

+0

然後省略'Current'。 –

0

您可以直接使用HttpContext.Current.Request您靜態類。

如果你想使用@Patrick福滿建議的做法,你應該換HttpContext.CurrentHttpContextWrapper它傳遞給方法之前:

SetCulture(new HttpContextWrapper(HttpContext.Current), "culture") 

在控制器中你有RequestResponse性能。所以我會建議將這些傳遞給你的幫手方法。

相關問題