2013-11-18 43 views
4

Мне нужна помощь с HttpWebRequest в C#. Ниже строки кодов работают нормально для локальных IIS, но когда я загружаюсь на удаленный сервер, он начинает давать мне «Удаленный сервер возвратил ошибку: (500) Internal Server Error.». Я попробовал много вариантов с помощью метода GET и POST, но не смог понять, в чем проблема. Пожалуйста, ознакомьтесь с нижеприведенным кодом и дайте мне знать, что с этим не так.HttpWebRequest. Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера

try 
{ 
    string postData = "applicaitonid=abc&deviceid=xyz"; 
    string uri = System.Configuration.ConfigurationManager.AppSettings.Get("baseUrl") + System.Configuration.ConfigurationManager.AppSettings.Get("ABApiPath") + "ConfirmAppBinding/?" + postData; 

    System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create(uri); 
    request.Method = "POST"; // Set type Post 
    //request.Method = "GET"; 
    request.UserAgent = Request.UserAgent.ToString(); 
    request.ContentType = @"application/json"; 
    request.MediaType = "application/json"; 
    request.Accept = "application/json"; 
    request.KeepAlive = false; 
    request.ProtocolVersion = HttpVersion.Version11; 
    //byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes(postData); 
    request.Timeout = 500000;    //Increase timeout for testing 

    Stream reqstr = request.GetRequestStream(); 
    //reqstr.Write(buffer, 0, buffer.Length); 
    reqstr.Close(); 

    // Read Response 
    var httpResponse = request.GetResponse(); 
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
    { 
     JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
     JsonMessage.message = streamReader.ReadToEnd(); 
     streamReader.Close(); 
    } 
} 
catch (WebException e) 
{ 
    JsonMessage.message = e.Message; 
    return Json(JsonMessage, JsonRequestBehavior.AllowGet); 
} 

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

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Спасибо @JohnSaunders – sim

+1

Проблема находится на стороне сервера. –

ответ

1

я буду принять удар в темноте

Может быть, у вас есть орфографические ошибки в вашей строке запроса и при ссылке ключа в коде возвращается с nullvalue исключением?

{ String postData = "applicaitonid=abc&deviceid=xyz"; 
} 

должен быть

{ String postData = "applicationid=abc&deviceid=xyz"; } 
+0

Игнорировать орфографическую ошибку в строке запроса. Опечатка здесь. Код работает нормально на локальном компьютере. Но когда я публикую его на удаленном сервере, то его предоставление «Удаленный сервер ответил на ошибку: (500)« Внутренняя ошибка сервера ». – sim

+0

Есть много «переменных», как насчет вашего значения uri? существует ли каталог abapipath на удаленном сервере? – Wombelite

+0

@Wombelite Я действительно попал в ту же проблему. Вместо 'userId', я использовал 'userID'. Благодарю. –

9

Используйте этот код для улова

catch (WebException e) 
{ 
    string pageContent = new StreamReader(wex.Response.GetResponseStream()).ReadToEnd().ToString(); 
    return pageContent; 
} 

Он покажет точную ошибку вы столкнулись.

+0

Спасибо! это помогло мне понять, что у меня был '[ValidateAntiyForgeryToken]' на моем контроллере, лишив меня моего запроса от ошибки. – Niklas

Смежные вопросы