2010-12-31 3 views
0

У нас есть веб-страница в нашем проекте, где веб-сайт публикует данные XML.Задача десериализации для временной метки в ASP.NET

string data = string.Concat("XMLParameter=", SampleXML, "&", "AccessCode=", "XYZ"); 
if (uri.Scheme == Uri.UriSchemeHttp) 
{ 
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
    request.Method = WebRequestMethods.Http.Post; 
    request.ContentLength = data.Length; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    StreamWriter writer = new StreamWriter(request.GetRequestStream()); 
    writer.Write(data); 
    writer.Close(); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    StreamReader reader = new StreamReader(response.GetResponseStream()); string tmp = reader.ReadToEnd(); 
    response.Close(); 
    Response.Write(tmp); 
} 

Когда мы проходим следующий XML с почтой,

<notification timestamp="2009-09-11T11:51:07+02:00"> 
    <reservation creation_date="2010-09-10T12:03:13"> 
    </reservation> 
</notification> 

На приемном конце в нашей веб-странице, метка времени мы получаем не содержат +. Вместо + это дает нам пространственный характор. Поэтому, десериализируя это, мы получили ошибку.

Мы получаем данные в страницу с помощью Request.Form [ "XMLParameter"]

Любое решение ???

ответ

1

У вас есть забавный сервис, в котором размещаются XML-данные, как если бы они поступали из HTML-формы с текстовым полем, содержащим данные XML.

Как следствие, веб-сервер ожидает, что ваши данные будут закодированы в URL. Вы даже указываете в типе контента, что он закодирован. Но это не так. Вы не кодируете его нигде в своем коде.

Итак, если вы хотите придерживаться своего забавного сервиса, вам необходимо запустить ваши данные XML через HttpUtility.UrlEncode.

+0

Кодо, кажется, смешно, но это не так. Фактически мы делаем веб-сервисы для интеграции с другими веб-сайтами. Но некоторые из старых сайтов или php-сайтов используют POST для отправки нам данных. И вы знаете, что заставить их использовать веб-сервис трудно: P. Во всяком случае, извините, если я не смог бы написать объяснение, которое полностью очистило бы то, что я хотел. Но я думаю, что я должен попробовать с этим и продолжить работу с третьей стороной, чтобы отправить нам образец и посмотреть, будет ли он набирать url-код или нет? Есть ли какой-либо вариант, если они отправляют URL-адрес, кодированный url: P. Как я уже сказал, я не мог их изменить :) –

+0

Им нужно отправить URL-адрес в кодировку. В противном случае вы не сможете разбить данные на параметры XMLParameter и AccessCode. Этого не должно быть слишком сложно достичь в PHP, поскольку он содержит встроенную функцию _urlencode_. – Codo

+0

Да. но я не знаю, что они используют, поскольку они являются сторонними людьми. Они просто сказали нам, что они отправят нам данные для публикации и данные выше. Позвольте мне поговорить с ними и посмотреть, что их ответ. Я думаю, что они должны пройти urlencoded в соответствии с вашим ответом. –

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