WebRequest не пропустит заголовки

1

я троллировал и пробовал все, я делал это 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-контроллера

  • 0
    Этот заголовок авторизации не выглядит действительным в соответствии со стандартом и, вероятно, удаляется. Если вы хотите использовать пользовательский заголовок авторизации, возможно, использовать другое имя заголовка? В качестве теста, что произойдет, если вы измените название заголовка на что-то другое?
  • 0
    Я использовал этот формат раньше, и он работал нормально, но для забавы я пробовал другие способы, я обновил свой пост, чтобы отразить. Спасибо за ответ :-)
Показать ещё 4 комментария
Теги:
webrequest

4 ответа

0

Использовать DefaultRequestHeaders

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("test12345")

0

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

Не знаю, поможет ли это вам, но мой вот так, и у меня есть заголовок авторизации на стороне сервера, и я использую 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]
0

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

0

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

  • 0
    Да, требуется авторизация, но я попытался отправить другие заголовки, а не просто «Авторизация». Я тоже контролирую службу, поэтому я даже попробовал что-то сумасшедшее, например, разрешив «Test12» .. добавив, что на клиенте все еще не отправляет его.
  • 0
    @schmoopy. Можете ли вы создать Console.WriteLine("foo1") в коде на стороне клиента, чтобы обеспечить его компиляцию и отправку ваших изменений?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню