2013-09-21 1 views
2

Так что я пытаюсь связаться с asp.net API, который хочет параметры, как XML-строка-: /v3/publicservice.asmx/GetSearchResultAdvancedXml?queryXml= строкиAsp.net API в Java и Android

http://api.tradera.com/v3/publicservice.asmx?op=GetSearchResultAdvancedXml

Вещь, я получаю это сообщение: «Потенциально опасное значение Request.QueryString было обнаружено у клиента».

Какой appearantly решается: https://stackoverflow.com/a/2673905/585137

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <httpRuntime requestValidationMode="2.0" /> 
</system.web> 

Я хочу, чтобы представить это как-то андроид Java с HTTP GET.

Как отправить запросValidationMode = "2.0"?

+1

см. [Android, отправлять и получать XML через HTTP POST-метод] (http://stackoverflow.com/questions/5013373/android-send-and-receive-xml-via-http-post-method) может помогите вам в отправке xml в запрос –

ответ

0

Один из подходов заключается в том, чтобы сбрасывать XML-данные, отправляемые в качестве аргумента. Если вы отправляете XML из другого приложения ASP.NET, вы можете использовать: Uri.EscapeDataString. В соответствии с этим сообщением (C# Uri.EscapeDatastring() equivalent for Java) вам придется использовать классы URL или URI Java, чтобы избежать строки, которая впоследствии может быть использована в вашем приложении ASP.NET. Но java.net.URL и java.net.URI не позволяют вам избежать XML. Итак, вы можете сделать следующее:

1] Добавьте этот метод в свой код Java. Это измененная версия кода, который я нашел здесь: https://stackoverflow.com/a/10035382/2168278. Вы можете, как это предлагается в сообщении, использовать библиотеку XML.

public static String xmlEscapeText(String t) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for(int i = 0; i < t.length(); i++){ 
     char c = t.charAt(i); 
     switch(c){ 
     case '<': sb.append("%3C"); break; 
     case '>': sb.append("%3E"); break; 
     case '\"': sb.append("%22"); break; 
     case '&': sb.append("%26"); break; 
     case ' ': sb.append("%20"); break; 
     case '/': sb.append("%2F"); break; 
     default: 
     if(c>0x7e) { 
      sb.append("&#"+((int)c)+";"); 
     }else 
      sb.append(c); 
     } 
    } 
    return sb.toString(); 
} 

2] В коде ASP.NET (который я предполагаю, что C#), вы можете получить XML по:

var myXML = Uri.UnescapeDataString(op); 

Я проверил мой код, используя этот кусок XML :

<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note> 

, который я получил здесь: http://www.w3schools.com/xml/note.xml

0

это интересно знать, какие строки вы отправляете и получите эту проблему.

Это происходит из-за проверки, введенной в ASP.NET 4 http://www.asp.net/whitepapers/request-validation, которая предотвращает атаки с использованием параллельных скриптов.

Конфигурация, которую вы видели по другой ссылке, не может быть submiited с Android-устройства. Это необходимо сделать на стороне сервера.

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <httpRuntime requestValidationMode="2.0" /> 
</system.web> 

Here вы можете найти, как вы можете сделать это:

В результате ошибки проверки запроса может произойти в настоящее время для запросов , которые ранее не вызывают ошибок. Чтобы вернуться к поведению функции проверки запроса ASP.NET 2.0, добавьте следующую настройку в сеть .конфиг файл:

<httpRuntime requestValidationMode="2.0"/> 

Кроме того, в случае, если вы хотите, чтобы закодировать строку XML можно использовать простой метод в Java:

encodedString = UrlEncoder.encode(unencodedString) 

и декодировать его в C# с помощью:

unencodedString = Uri.UnescapeDataString(encodedString); 

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

  • Нет связанных вопросов^_^