2014-11-18 1 views
1

Я пробовал и пробовал все, я делал это 100 раз раньше, без проблем, но теперь я в тупик.WebRequest не будет передавать заголовки

Я просто хочу передать информацию заголовка из webrequest.

Клиент работает отдельно и подключается к службе отдыха wcf. Служба есть этот код, который получает удар:

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Authorization, Origin, Content-Type, Accept, X-Requested-With"); 

клиент имеет это:

var client = WebRequest.Create(url); 
    client.Method = type.ToString().ToUpper(); 
    client.ContentType = "application/json"; 
    client.ContentLength = bytes.Length; 
    client.Headers.Add(String.Format("Authorization: {0}", "test12345")); 

Я также пробовал, например:

client.Headers["X-Requested-With"] = "test1234"; 
    client.Headers["Authorization"] = "test1234"; 

Независимо от того, как я стараюсь и установить заголовки они никогда не передаются. Когда я смотрю на запрос в скрипаче, авторизация НИКОГДА не существует. Я также пытался отправить X-Requested-With и т. Д., Но независимо от того, что заголовок не пройдет.

Заранее спасибо.

UPDATE: Я нашел этот вопрос, но не решения: WebRequest will not pass headers when used from within ASP.NET MVC controller

+0

Этот заголовок Authorization не выглядит действительный в соответствии со стандартом и, вероятно, раздел. Если вы хотите использовать пользовательский заголовок авторизации, возможно, используете другое имя заголовка? Как тест, что произойдет, если вы измените название своего заголовка на что-то другое? – wal

+0

Я использовал этот формат раньше, и он отлично работал, но для funzies я пробовал другие способы, я обновил свой пост, чтобы его отразить. Спасибо за ответ :-) – schmoopy

+0

также, что происходит, когда вы устанавливаете его более традиционным способом, например 'client .Credentials = new NetworkCredential (« пользователь »,« pass »);' (nb это приведет к другому результату, имеют выше) – wal

ответ

0

Требуется ли сервер аутентификации? Согласно this ответ WebRequest не будет отправлять учетные данные, пока не будет оспорено. Если вы хотите отправить его независимо от того, что вам нужно будет использовать другой класс, чем WebRequest, отправьте запрос, например RestSharp

+0

Да, требуется авторизация, но я пробовал отправка других заголовков, а не только «авторизация». Я тоже управляю службой, поэтому даже попробовал что-то сумасшедшее, например, «Test12» .. добавив, что на клиенте все равно не отправляет его. – schmoopy

+0

@schmoopy вы можете сделать 'Console.WriteLine (« foo1 »)' в своем клиентском коде, чтобы обеспечить его компиляцию и отправку изменений? – wal

+0

Да, я сделал Debug.WriteLine ... привет от консоли !!! Хорошее предложение tho. Я просто очистил все «Темп». asp.net файлы тоже на всякий случай, но все равно не работает – schmoopy

0

Вместо использования WebRequest вы можете использовать RestSharp. Он имеет простую абстракцию и API.

0

Я знаю, что, возможно, слишком поздно (нашел это, когда искал ответы на мой вопрос).

Не знаю, поможет ли это вам, но мой вот так, и у меня есть заголовок авторизации на стороне сервера, и я использую 4.5.1.

Client Side

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
req.Headers[HttpRequestHeader.Authorization] = "basic " + 
      Convert.ToBase64String(
      Encoding.ASCII.GetBytes(
      string.Format("{0}|{1}", "login", "password"))); 

string result = string.Empty; 
using (WebResponse resp = (HttpWebResponse)req.GetResponse()) 
{ 
    using (StreamReader sr = new StreamReader(resp.GetResponseStream())) 
    { 
     result = sr.ReadToEnd(); 
    } 
} 

стороне сервера

WebOperationContext.Current.IncomingRequest.Headers[HttpRequestHeader.Authorization] 
0

Используйте DefaultRequestHeaders

client.DefaultRequestHeaders.Authorization = новый AuthenticationHeaderValue ("test12345")

 Смежные вопросы

  • Нет связанных вопросов^_^