Разница между HttpControllerContext.Request и HttpContext.Current.Request

Я просто пытаюсь провести модульное тестирование моего пользовательского ApiController. В моем пользовательском контроллере я переопределяю метод Initialize для оценки заголовка авторизации.

Итак, моя проблема в том, что у меня есть 2 доступных заголовка запроса.

protected override void Initialize(HttpControllerContext controllerContext)
{
    base.Initialize(controllerContext);
    // Headers 1
    var headersOne = controllerContext.Request.Headers;
    // Headers 2
    var headersTwo = HttpContext.Current.Request.Headers;
}

Но это не проблема сама по себе. Проблема в том, что заголовки не совпадают. Итак, для продуктивной работы: Где я должен искать заголовок авторизации. И где я должен применить свой заголовок авторизации для моего тестового сценария.

На данный момент я применяю заголовок авторизации к controllerContext:

var fakeControllerContext = new HttpControllerContext
{
    Request = new HttpRequestMessage
    {
        RequestUri = new Uri("http://localhost/api/test"),
        Headers =
        {
            { "Authorization", "Fake Authorization-Header"}
        }
    }
};

Но как я уже сказал. Заголовок позже недоступен в HttpContext.Current.Request.Headers. Не могли бы вы мне помочь? К сожалению, я не совсем понимаю, какой контекст выполняет какую цель.


person Daniel    schedule 16.07.2015    source источник
comment
Возможно, вот ответ: stackoverflow.com/questions/31189028/   -  person Daniel    schedule 16.07.2015


Ответы (1)


Теперь я узнал, что HttpContext.Current — это старая реализация, которую больше не следует использовать. Потому что вы не можете контролировать его содержимое для его модульного тестирования.

HttpControllerContext - это просто более новая реализация. И это содержание также взаимозаменяемо. Представленный controllerContext для инициализации метода доступен в свойстве ControllerContext. Так что вы должны использовать это.

Нашел это здесь в первом ответе: Тестирование сети Метод API, который использует HttpContext.Current.Request.Files? Спасибо: Мартин Ливерсейдж

person Daniel    schedule 16.07.2015