я троллировал и пробовал все, я делал это 100 раз, прежде чем без проблем, но теперь я в тупик.
Я просто хочу передать информацию заголовка из 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 и т.д., Но независимо от того, что заголовок не пройдет.
Заранее спасибо.
ОБНОВЛЕНИЕ: я нашел проблему, но не решения: WebRequest не будет передавать заголовки при использовании из ASP.NET MVC-контроллера
Использовать DefaultRequestHeaders
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("test12345")
Я знаю, что, возможно, слишком поздно (нашел это, когда искал ответы на мой вопрос).
Не знаю, поможет ли это вам, но мой вот так, и у меня есть заголовок авторизации на стороне сервера, и я использую 4.5.1.
Сторона клиента
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]
Вместо использования WebRequest вы можете использовать RestSharp. Он имеет простую абстракцию и API.
Требуется ли проверка подлинности на сервере? В соответствии с этим ответом WebRequest не будет отправлять учетные данные до оспаривания. Если вы хотите отправить его независимо от того, что вам может понадобиться использовать другой класс, чем WebRequest
для отправки запроса, например RestSharp
Console.WriteLine("foo1")
в коде на стороне клиента, чтобы обеспечить его компиляцию и отправку ваших изменений?