[英]Why I can't use the BaseController Initialize() method in this controller class?
我在.NET中非常陌生 (我來自Java EE生態系統),並且我有以下疑問。 在我正在處理的項目中,我有一個控制器類擴展了ApiController抽象類:
public class MailProtocolloController : ApiController
{
private String urlBaseProtocolloApi = "http://XXX.westeurope.cloudapp.azure.com:8080";
private NetworkCredential myCreds;
private CredentialCache credCache;
public MailProtocolloController()
{
var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext.Current);
using (var contextCurrentUser = spContext.CreateUserClientContextForSPHost())
{
PecMailAdminContext dbContext = new PecMailAdminContext();
Casella casella = Casella.GetCasellaFromSito(dbContext, spContext.SPHostUrl.ToString());
string userServizio = casella.Username;
string passwordUserServizio = MailManagerUtilities.Utils.Decrypt(casella.Password);
credCache = new CredentialCache();
}
}
..........................................................................................................
..........................................................................................................
..........................................................................................................
}
如您在前面的代碼中看到的,我將有關特定用戶的信息直接檢索到構造函數中(必須做的第一件事是因為此用戶將在所有控制器方法處理請求中使用,以執行外部HTTP請求)外部WS。
我認為在構造函數中執行此操作非常糟糕,因為構造函數只需要從paramether設置變量值,而不必實現真正的邏輯。
因此,我正在考慮將此邏輯模塊移至初始化方法中。 我知道理論上我的控制器類應該實現BaseController接口,然后實現包含以下邏輯的初始化方法:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
// RETRIEVE THE SERVICE USER HERE
}
問題是我試圖做這樣的事情:
public class MailProtocolloController : ApiController, BaseController
{
......................................................
......................................................
......................................................
}
但是Visual Studio在方法聲明中對該BaseController的聲明給了我一個錯誤,錯誤是:
找不到類型或名稱空間名稱“ BaseController”(是否缺少using指令或程序集引用?)。
我無法導入此接口定義。
問題是什么? 我想念什么? 如何嘗試修復它或以其他方式在控制器中使用初始化方法?
當MailProtocolloController
與BaseController
位於不同的命名空間時,會發生這種情況。 解決方案是,要么添加一個using BaseControllerNamespace;
要么 包含MailProtocolloController
.cs文件頂部的偽指令(類似於Java中的import
),或為BaseController
提供完全限定的類型名稱,例如:
public class MailProtocolloController : ApiController, BaseControllerNamespace.BaseController
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.