Как создать Http-запрос к другому серверу (URI) и вызвать его синхронно

#c# #asp.net-mvc #asp.net-mvc-3

#c# #asp.net-mvc #asp.net-mvc-3

Вопрос:

У меня есть ASP.net Приложение MVC3. В одном из моих контроллеров есть действие для отправки SMS некоторым пользователям нашего приложения. Теперь, согласно нашему поставщику SMS, ему потребуется http-запрос к своему серверу (скажем http://www.sms-sender-server.com). Существует ряд параметров запроса, которые будут добавлены к этому URI. Затем запрос необходимо отправить в указанный выше URI с параметрами запроса, и sms-сервер отправит код состояния (ответ) обратно, указывающий, была ли отправка sms неудачной или успешной. Я не уверен, как мы создаем такой запрос в ASP.net (или C #, если это кажется логичным). Если кто-нибудь может направить меня в правильном направлении, я был бы благодарен.

Ответ №1:

Используйте класс WebClient. Это проще в использовании, чем WebRequest (и его производные). И внутренне он также использует WebRequest.

Ответ №2:

Вам нужен WebRequest класс. В документации есть пример:

 // Create a new 'Uri' object with the specified string.
Uri myUri =new Uri("http://www.contoso.com");
// Create a new request to the above mentioned URL. 
WebRequest myWebRequest= WebRequest.Create(myUri);
// Assign the response object of 'WebRequest' to a 'WebResponse' variable.
WebResponse myWebResponse= myWebRequest.GetResponse();
  

Проверьте StatusCode свойство WebResponse объекта на предмет возвращенного статуса от поставщика SMS.

Комментарии:

1. WebRequest (или HttpWebRequest), похоже, вполне подходит для моего сценария. Однако мне было интересно, почему у него нет параметров name / value для построения своей строки запроса, как у WebClient ( msdn.microsoft.com/en-us/library /… ). Придется ли мне создавать строку запроса вручную без помощи пар Имя / значение?

2. Да, вы будете — ответ заключается в том, что WebRequest обычно это реализация более низкого уровня, чем WebClient поэтому, хотя у вас больше контроля, вы выполняете меньше работы за вас. Но поскольку вас интересует код состояния, а не фактический ответ, имеет смысл использовать WebRequest .

Ответ №3:

Вы также можете использовать класс HttpWebRequest.

Ответ №4:

Я знаю, что в названии вопроса конкретно говорится о синхронных вызовах, но вы, возможно, действительно захотите изучить асинхронные контроллеры для сторонних сетевых запросов.

http://msdn.microsoft.com/en-us/library/ee728598 (v= против 98).aspx