Категория: ASP.NET | Кодементор
Недавно я столкнулся с интересным требованием отправлять XML-данные на определенный URL-адрес с помощью POST, что означает, что мне нужно отправить некоторые XML-данные на URL-адрес. Я пришел, чтобы ответить в течение пары часов «погуглить» и НИОКР. Ниже приведен пример кода, который я создал для объяснения техники. Сценарий определяет здесь, объясняет отправку данных между двумя веб-сайтами, один из которых является запрашивающим веб-сайтом, который отправляет XML-данные POST, а другой — веб-сайтом-ответчиком, который собирает данные с запрашивающего веб-сайта.
Пошаговая инструкция выглядит следующим образом.
- Откройте экземпляр Microsoft Visual Studio и в меню файлов выберите параметр для создания веб-сайта/веб-приложения ASP.NET. Создайте два веб-сайта с помощью этой опции и назовите эти веб-сайты удобными для пользователя именами, такими как Запрашивающий и Ответчик. Для облегчения просмотра разработчиком сделайте эти веб-сайты под единым решением Visual Studio.
- По умолчанию внутри каждого веб-сайта будет страница default.aspx. Просто удалите эту страницу, мы можем создать новые страницы для нашего образца.
- Добавьте новую страницу на сайт Заявителя. Мы можем назвать эту страницу как requestor.aspx. Наша цель — опубликовать XML-данные из requestor.aspx в responseer.aspx веб-сайта Responder. Используя страницу ответчика, мы сохраним эти XML-данные в текстовый (.txt) файл. Добавьте новую страницу на веб-сайт Responder, назовите эту страницу requestor.aspx.
- Веб-сайт Host Responder в вашем локальном IIS.
- Выберите веб-сайт запрашивающего. Создайте страницу запрашивающего, как показано на изображении ниже.
Одно основное многострочное текстовое поле для данных XML, текстовое поле для ввода URL-адреса для отправки данных XML и кнопка
6. Обработайте событие нажатия кнопки, добавьте к этому событию следующий фрагмент кода.
protected void btnPostXml_Click(object sender, EventArgs e)
{
System.Net.WebRequest req = null;
System.Net.WebResponse rsp = null;
try
{
string uri = txtURI.Text;
req = System.Net.WebRequest.Create ( uri );
req.Method = "POST";
req.ContentType = "text/xml";
System.IO.StreamWriter writer = new System.IO.StreamWriter ( req.GetRequestStream () );
writer.WriteLine ( txtXMLData.Text );
writer.Close ();
rsp = req.GetResponse ();
}
catch
{
throw;
}
finally
{
if (req != null) req.GetRequestStream ().Close ();
if (rsp != null) rsp.GetResponseStream ().Close ();
}
}
7.Выберите веб-сайт Responder. Возьмите событие загрузки страницы страницы Responder.aspx. Добавьте следующий фрагмент кода в событие Load.
protected void Page_Load(object sender, EventArgs e)
{
Page.Response.ContentType = "text/xml";
System.IO.StreamReader reader = new System.IO.StreamReader ( Page.Request.InputStream );
String xmlData = reader.ReadToEnd ();
System.IO.StreamWriter SW;
SW = File.CreateText ( Server.MapPath(".")+@"\"+ Guid.NewGuid () + ".txt" );
SW.WriteLine ( xmlData );
SW.Close ();
}
Здесь мы читаем поток данных из запроса страницы и записываем эти данные в текстовый файл.
Примечание : В этом образце я сделал ValidateRequest = «false», чтобы запрашивающая сторона принимала XML-данные в сообщении формы.
Эту методологию также можно использовать в качестве ОБРАТНОГО ВЫЗОВА на URL-адрес с некоторой публикацией данных.
Возьмите пример кода(требуется VS 2010)
Спасибо, что прочитали этот пост. Пожалуйста, прокомментируйте, если у вас есть какие-либо проблемы / сомнения с кодом.