2014-11-19 1 views
0

У меня есть проект ASP.NET MVC 4, который, когда я делаю http-вызов с использованием web-запроса, заголовки не пройдут.WebRequest не будет передавать заголовки при использовании изнутри ASP.NET MVC-контроллера

Тот же самый код в LINQPad я могу установить данные в заголовках, такие как РАЗРЕШЕНИЯ и она отлично работает (я могу увидеть значение заголовков в Fiddler)

Однако, когда я делаю тот же код внутри моего контроллера MCV то заголовки не проходят. Как будто ASP.NET MVC переопределяет мои заголовки.

Любые предложения?

 var client = WebRequest.Create(url); 
     client.Headers.Add(String.Format("Authorization:{0}", "Fun-Kitty")); 
     client.Headers.Add(String.Format("X-Requested-With:{0}", "PowerFlower")); 
     client.Method = "GET"; 
     client.ContentType = "application/json"; 

     HttpWebResponse resp; 
     using (resp = (HttpWebResponse)client.GetResponse()) 
     { 
      if (resp.GetResponseStream() != null) 
      { 
       var status = resp.StatusDescription; // TODO 
       var reader = new StreamReader(resp.GetResponseStream()); 
       var obj = reader.ReadToEnd(); 
      } 
     } 

UPDATE: Пожалуйста, обратите внимание, что заголовки правильно настройки (кроме случаев, когда вызывается из с MVC контроллер) - установка заголовка различные способы не имеет никакого влияния (т.е. работает в LINQPad, а не в MVC контроллер)

client.Headers.Set("Authorization", "PwrUp"); 
    client.Headers["Authorization"] = "ababab11ab"; 
    client.Headers.Add(String.Format("Authorization:{0}", "Fun-Kitty")); 

Этот код отлично передает заголовки из LinqPad или Winforms/WPF App, но не из ASP.NET MVC Controller.

Я также заметил при осмотре заголовок, когда вызов сделан из контроллера MVC, следующее значение устанавливается (не уверен, если он не имеет ничего общего с ним, хотя):

X-Requested-With: XMLHttpRequest 

ответ

0

Я считаю, вам нужно удалить пустое пространство на правой стороне : на ваш заголовок добавляет:

client.Headers.Add(String.Format("Authorization:{0}", "Fun-Kitty")); 
client.Headers.Add(String.Format("X-Requested-With:{0}", "PowerFlower")); 

в качестве альтернативы, используйте перегрузку, которая принимает 2 строковых параметра:

client.Headers.Add("Authorization", "Fun-Kitty"); 
client.Headers.Add("X-Requested-With", "PowerFlower"); 

Пер с MSDN docs:

Параметр заголовка должен быть указан в формате "имя: значение".

+0

Благодарим за отзыв. То, как я устанавливаю заголовки, в порядке, я удалил пробел только для теста, но те же результаты. Эти настройки (с пробелами или без них) отлично работают с Linqpad или Winform-приложением, просто не в ASP.NET MVC Controller. – schmoopy

+0

У меня есть теория @schmoopy. Попробуйте сделать создание для 'HttpWebRequest':' var client = (HttpWebRequest) WebRequest.Create (url); ' – Haney

+0

спасибо за предложение. Я пробовал это, но результаты те же. – schmoopy