[英]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.