Заголовок авторизации ASP.NET HTTP - PullRequest
25 голосов
/ 13 января 2011

Я хотел бы знать, почему мое приложение asp.net не будет добавлять заголовок к моему сообщению, когда оно называется «Авторизация», но будет работать нормально, когда я изменю один символ, скажем «Авторизация».В документации для других сайтов они всегда используют имя «Авторизация», поэтому я бы тоже хотел, и на данный момент я просто хочу понять, почему.

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

Вот мой код ниже:

string fileName = "c:\\xyz.xml";
string uri = "http://myserver/Default.aspx";
req = WebRequest.Create(uri);
req.Method = "POST";
req.ContentType = "text/xml";
byte[] authBytes = Encoding.UTF8.GetBytes("DDSServices:jCole2011".ToCharArray());
req.Headers.Add("Authorization", "BASIC " + Convert.ToBase64String(authBytes) );
req.Headers.Add("test", "test");
UTF8Encoding encoder = new UTF8Encoding();
byte[] data = encoder.GetBytes(this.GetTextFromXMLFile(fileName));
req.ContentLength = data.Length;
Stream reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();
req.Headers.Add("Authorization", "BASIC" + Convert.ToBase64String(authBytes));
System.Net.WebResponse response = req.GetResponse();
System.IO.StreamReader reader = new StreamReader(response.GetResponseStream());
string str = reader.ReadToEnd();

Другая раздражающая ситуация - это когда я добавляю наблюдаемую переменную через fiddler, она работает нормально.

Ответы [ 3 ]

42 голосов
/ 14 марта 2012

Я столкнулся с вопросом, как добавить Аутентификацию / Учетные данные в заголовки.Я нашел решение следующим образом.

string _auth = string.Format("{0}:{1}", "myUser","myPwd");
string _enc = Convert.ToBase64String(Encoding.ASCII.GetBytes(_auth));
string _cred = string.Format("{0} {1}", "Basic", _enc);
req.Headers[HttpRequestHeader.Authorization] = _cred;

, который дал мне те заголовки, которые я хочу (вставил описания Wireshark),

Авторизация: Basic bXlVc2VyOm15UHdk \ r \ n
Учетные данные: myUser: myPwd

11 голосов
/ 13 января 2011

Для базовой HTTP-авторизации вы должны использовать свойство Credentials.

req.Credentials = new NetworkCredential("DDSServices", "jCole2011");

Это должно делать то, что вы хотите. Вместо того, чтобы устанавливать заголовок авторизации.

3 голосов
/ 08 марта 2012

NetworkCredential - это хорошее решение, но вызываемый вами сайт должен обрабатывать несанкционированный заголовок 401 И WWW-Authenticate в ответе.

Клиент:

request.Credentials = new CredentialCache {{aUri, "Basic", new NetworkCredential(aUserName, aPassword)}};

Сервер:

Response.ClearContent();
Response.StatusCode = 401;
Response.AddHeader("WWW-Authenticate", "Basic");
Response.End();

Это приведет к 2 попаданиям на сервер.Первоначальный вызов будет идти на сервер без учетных данных.Когда сервер отвечает 401 И заголовком WWW-Authenticate (с требуемым типом аутентификации), запрос будет повторно отправлен с учетными данными в запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...