Почему я не могу использовать метод BaseController Initialize () в этом классе контроллера? - PullRequest
0 голосов
/ 15 января 2019

Я довольно новичок в .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.

Я думаю, что сделать это в конструкторе довольно ужасно, потому что конструктор должен только устанавливать значения переменных из параметров и не должен реализовывать настоящую логику.

Так что я подумывал перевести этот логику в метод инициализации. Я знаю, что теоретически мой класс контроллера должен реализовывать интерфейс BaseController , а затем реализовывать этот метод инициализации, который будет содержать следующую логику:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    // RETRIEVE THE SERVICE USER HERE
}

Проблема в том, что я пытался сделать что-то вроде этого:

public class MailProtocolloController : ApiController, BaseController
{
    ......................................................
    ......................................................
    ......................................................
}

но Visual Studio выдает ошибку при объявлении этого BaseController в объявлении метода, ошибка:

Не удалось найти тип или имя пространства имен BaseController (есть Вы пропустили директиву по использованию или ссылку на сборку?).

Я не могу импортировать это определение интерфейса.

В чем проблема? Что мне не хватает? Как я могу попытаться исправить это или использовать метод инициализации другим способом в моем контроллере?

1 Ответ

0 голосов
/ 15 января 2019

Это происходит, когда ваш MailProtocolloController находится в другом пространстве имен, чем BaseController. Решение: либо добавьте директиву using BaseControllerNamespace; в начало вашего файла .cs, который содержит MailProtocolloController (аналогично import в Java), либо укажите полное имя типа для BaseController, например:

public class MailProtocolloController : ApiController, BaseControllerNamespace.BaseController
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...