为什么我不能在此控制器类中使用BaseController Initialize()方法?

时间:2019-01-15 13:23:44

标签: c# .net asp.net-mvc asp.net-apicontroller

.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();
        }
    }

    ..........................................................................................................
    ..........................................................................................................
    ..........................................................................................................
}

正如您在前面的代码中看到的那样,我正在直接将有关特定用户的信息检索到构造函数中(这必须是第一件事,因为这将在所有控制器方法处理请求中使用该用户来执行外部操作到外部WS的HTTP请求。

我认为在构造函数中执行此操作非常糟糕,因为构造函数只需要从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指令或程序集引用?)。

我无法导入此接口定义。

出什么问题了?我想念什么?如何尝试修复它或以其他方式在控制器中使用初始化方法?

1 个答案:

答案 0 :(得分:0)

当您的MailProtocolloControllerBaseController位于不同的命名空间时,会发生这种情况。 该解决方案可以在包含using BaseControllerNamespace;的.cs文件顶部添加一个MailProtocolloController指令(类似于Java中的import),或者为{{1}提供完全限定的类型名称。 },例如:

BaseController
相关问题