ASP.NET: обходной путь заголовка даты httpwebrequest - PullRequest
4 голосов
/ 17 июля 2009

Я пытаюсь интегрировать с API, который требует заголовок «Дата» в веб-запросе. Как вы, возможно, хорошо знаете, .NET удалил возможность добавлять или даже отображать заголовок Date по умолчанию в вашем запросе, поэтому мне было интересно об обходном пути.

В этом и заключается подвох: вы не можете использовать TCPClients, потому что у меня нет «разрешений» на моем сервере для такой вещи, как сокеты. Есть ли способ «обмануть» систему, чтобы подделать заголовок даты или обмануть его в публикации заголовка даты? Или я должен просто отказаться от этого API?

Спасибо ...

(PS, язык VB.NET, если хотите :))

Ответы [ 3 ]

1 голос
/ 02 декабря 2009

Я нашел ответ на проблему с датой, вам просто нужно получить прямой доступ к запросу как запрос HttpWebRequest. Это кажется простым ответом, но это сработало.

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri)  ;

request.Date = date;
request.Method = "POST";
0 голосов
/ 17 июля 2009

Это не самый быстрый код в мире, но он может работать некоторое время:

Type type = request.Headers.GetType();
MethodInfo method = type.GetMethod("AddWithoutValidate", 
    BindingFlags.Instance | BindingFlags.NonPublic);
method.Invoke(request.Headers, new [] { "Date", DateTime.Now.ToString() })

Просто имейте в виду, что использование отражения для доступа к закрытым или защищенным членам чрезвычайно хрупко и может сломаться при любом обновлении .NET, которое делает MS ...

0 голосов
/ 17 июля 2009

Согласно документации, система добавит заголовок Date с текущей датой и временем. Вам нужно другое значение для заголовка?

Вы можете добавить его, используя request.Headers.AddWithoutValidate.

...