2012-02-11 77 views
0

我有下面的代碼(從here解除),我試圖在Linux服務器上運行w/mono 2.10.5。單聲道HttpContext.GetService

private static HttpContext GetCurrentContext(ControllerContext context) { 
    var currentApplication = (HttpApplication)context.HttpContext.GetService(typeof(HttpApplication)); 
    if (currentApplication == null) { 
     throw new NullReferenceException("currentApplication"); 
    } 

    return currentApplication.Context; 
} 

當單上運行,我得到下面的異常,這是足夠簡單:

System.NotImplementedException: The requested feature is not 
implemented. at System.Web.HttpContextWrapper.GetService 
(System.Type serviceType) [0x00000] in <filename unknown>:0 

是否存在已知的解決方法,我可以用它來完成對單聲道同樣的結果?

回答

3

不能確定GetService方法在單聲道,但你已經解除代碼可以縮短這樣的:

private static HttpContextBase GetCurrentContext(ControllerContext context) { 
    return context.HttpContext; 
} 

你並不真的需要經過應用程序,以獲取的HttpContext當你有直接訪問它。我還將返回類型更改爲HttpContextBase而不是HttpContext,因爲在ASP.NET MVC中,建議始終使用抽象。它使你的代碼更加弱耦合並且可以單元測試。

,或者對於一些未知的給我的原因,你想用實際HttpContext工作(不知道爲什麼有人想綁他的代碼,它),你可以嘗試以下方法:

private static HttpContext GetCurrentContext(ControllerContext context) { 
    return context.HttpContext.ApplicationInstance.Context; 
} 

但你在這兩種情況下都可以看到這種GetCurrentContext靜態方法的存在變得相當可疑。

+0

舉起,缺口等等 - - 所有的聲音都比被盜的聲音好;)你在中途得到了我 - GetService被用於將HttpContextBase轉換爲HttpContext(根據ELMAH的要求)。從這篇文章的評論(http://stackoverflow.com/a/4567707/794)看來,context.HttpContext.ApplicationInstance.Context將做到這一點(並在單聲道工作)。如果你想編輯你的答案,我會接受它。 – AlexCuse 2012-02-11 21:21:03