Мне нужно сделать из моего приложения аутентифицированный httpwebrequest.ответ на мой запрос должен быть в формате json.для этого я использую код ниже:
// Create the web request
Uri address = new Uri("http://www.mysite.com/remote/user/login/format/json");
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
request.Method = "POST";
request.UseDefaultCredentials = false;
request.Credentials = new NetworkCredential(UserName, Password);
request.PreAuthenticate = true;
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "application/json";
string data = string.Format("username={0}&password={1}", otherusername, otherpassword);
// Create a byte array of the data we want to send
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data);
// Set the content length in the request headers
request.ContentLength = byteData.Length;
//Write data
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
// Get response
try
{
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Console application output
jsonResponse = reader.ReadToEnd();
reader.Close();
}
user = new User();
JObject o = JObject.Parse(jsonResponse);
user.Unguessable_id = (string)o["unguessable_id"];
user.Print_id = (string)o["print_id"];
user.Rrid = (string)o["rrid"];
user.Raid = (string)o["raid"];
}
catch (WebException ex) {
errorMessage = ex.Message;
}
проблема в том, что самый первый вызов всегда выдает ошибку 500 на сервере.и запрос не выполняется.если я повторяю вызов (делая обновление в моем браузере), запрос будет успешным.
запрос должен выглядеть следующим образом в нормальных условиях:
POST /remote/user/login/format/json HTTP/1.1
Host: <yourhost>
username=user&password=pass
, но когда сервер отправляетошибка 500 он получил примерно так:
username=user&password=passwordPOST /remote/user/login/format/json HTTP/1.1
Есть идеи, почему это происходит?в моем тестовом приложении, если я обновляю страницу, которая делает запрос httpwebrequest, вызов успешен.
РЕДАКТИРОВАТЬ: после установки Fiddler сделанные запросы выглядят так:
=>тот, который генерирует 500
POST http://www.mysite.com/remote/user/login/format/json HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Host: www.mysite.com
Content-Length: 30
Expect: 100-continue
Connection: Keep-Alive
username=user&password=pass
=> тот, который сделан при обновлении
POST http://www.mysite.com/remote/user/login/format/json HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Authorization: Basic ZGNpOkFpR2g3YWVj
Host: www.mysite.com
Content-Length: 30
Expect: 100-continue
Connection: Keep-Alive
username=user&password=pass
кажется, что Авторизация: Basic ZGNpOkFpR2g3YWVj не включена в первый запрос... почему это происходит? (я использую один и тот же код для обоих запросов)