2013-05-29 71 views
5

添加自定義類在ASP.NET MVC C#項目。 這是我在控制器:到HttpContext的

HttpContext.Items["IUser"] = new CustomClass(「parameter」); 

也能正常工作的視圖中的檢索因爲我重寫默認WebViewPage這樣的觀點web.config文件:

<pages pageBaseType="Project.CustomWebViewPage"> 

在CustomWebViewPage裏面我創建一個屬性,並在InitHelpers設置()方法是這樣的:

IUser = (CustomClass)HttpContext.Current.Items["IUser"]; 

不過,如果我想在我的模型/的ViewModels進行檢索我將不得不把代碼放到任何地方,因此我想直接在HttpContext中創建CustomClass(所以我至少不必強制類型化),但是我無法找到如何進行重寫或動態地將該對象添加到它。

回答

9

您可以創建一個擴展方法。事情是這樣的:

public static class HttpContextExtensions 
{ 
    public static CustomClass GetUser(this HttpContextBase context) 
    { 
     return (CustomClass)context.Items["IUser"]; 
    } 
} 

那麼你會這樣稱呼它:

var user = HttpContext.Current.GetUser(); 
5

我最近遇到了類似的問題。雖然我使用過WebForms,但我的解決方案也適用於MVC。

我創建了一個新對象來訪問每個請求的DAL /業務邏輯層。這使我可以對邏輯進行更改,無論請求需要多長時間,或者有多個請求同時執行。當請求結束時,它也可以確保我的對象的處置。

我的第一個想法是創建一個HttpContextBase的自定義實現,但我找不到任何方法來覆蓋請求的創建HttpContext

所以最後我介紹了一個封裝了所有邏輯的擴展方法:

public static class HttpContextExtensions 
{ 
    public static CustomClass GetIUser(this HttpContextBase Context) 
    { 
     return Context.Items["IUser"] as CustomClass; 
    } 
} 

現在你的代碼可以簡化爲:

var user = Request.RequestContext.HttpContext.GetIUser();