0

Я просто пытаюсь выполнить Unit-Test мой пользовательский ApiController. В моем настраиваемом контроллере я переопределяю метод Initialize для оценки заголовка авторизации.Разница между HttpControllerContext.Request и HttpContext.Current.Request

Так что моя проблема в том, что у меня есть 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. Не могли бы вы помочь мне? К сожалению, я точно не понимаю, какой контекст выполняет какую-то цель.

+0

Может быть, здесь есть Anwer: http://stackoverflow.com/questions/31189028/testing-a-web-api-method -Вот потребляющих-HttpContext-ток-Request-файлы – Daniel

ответ

0

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

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

Нашел здесь в первый ответ: Testing a Web API method that uses HttpContext.Current.Request.Files? Благодаря: Мартин Liversage