Получить отправленный документ XML - PullRequest
2 голосов
/ 28 марта 2011

У меня есть 2 проекта: один - просто общий обработчик .ashx, а другой - тестовый проект, который отправляет в него документ XML.Как получить документ XML, который был опубликован?

Код клиента (сокращен для краткости)

    string xmlToSend = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><APPLICATION>  <TRANSACTIONTYPE>12</TRANSACTIONTYPE></APPLICATION>";
    WebRequest webRequest = WebRequest.Create(new Uri("http://localhost:8022/handle.ashx"));
    webRequest.ContentType = "text/xml";
    webRequest.Method = "POST";
    byte[] bytes = Encoding.ASCII.GetBytes(xmlToSend);
    Stream os = null;
    webRequest.ContentLength = bytes.Length;
    os = webRequest.GetRequestStream();
    os.Write(bytes, 0, bytes.Length);
    os.Close();
    WebResponse webResponse = webRequest.GetResponse();
    //if (webResponse == null)
    //{ return null; }
    StreamReader sr = new StreamReader(webResponse.GetResponseStream());
    string sRet = "";
    sRet = sr.ReadToEnd().Trim();

Код получения

public void ProcessRequest(HttpContext context)
{
    // Well, not sure what to do here.  
    // context.Request.Params has a count of 48, but doesn't have the XML.
    // context.Request.Form has a count of 0

}

Я знаюЯ здесь упускаю что-то фундаментальное.Но я не могу понять это ради своей жизни.

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

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

Ответы [ 2 ]

1 голос
/ 29 марта 2011

context.Request.InputStream содержит данные, которые вы ищете.

Пример Microsoft:

System.IO.Stream str; String strmContents;
Int32 counter, strLen, strRead;
// Create a Stream object.
str = Request.InputStream;
// Find number of bytes in stream.
strLen = Convert.ToInt32(str.Length);
// Create a byte array.
byte[] strArr = new byte[strLen];
// Read stream into byte array.
strRead = str.Read(strArr, 0, strLen);

// Convert byte array to a text string.
strmContents = "";
for (counter = 0; counter < strLen; counter++)
{
    strmContents = strmContents + strArr[counter].ToString();            
}

Существуют и другие лучшие способы работы с текстом, такие как StreamReader или объединение с использованием StringBuilder.

0 голосов
/ 03 сентября 2015
public void ProcessRequest(HttpContext context)
{
   string data = new StreamReader(context.Request.InputStream).ReadToEnd();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...