2

So I am trying to contact an asp.net API that wants the parameters as an xml-string: /v3/publicservice.asmx/GetSearchResultAdvancedXml?queryXml=string

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

Thing is, I get this message: "A potentially dangerous Request.QueryString value was detected from the client."

Which appearantly is solved by: https://stackoverflow.com/a/2673905/585137

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

I want submit this somehow in android java with Http get.

How do I send requestValidationMode="2.0" ?

4

2 回答 2

0

一种方法是将您作为参数发送的 XML 转义。如果您从另一个 ASP.NET 应用程序发送 XML,您可以使用:Uri.EscapeDataString。根据这篇文章( Java 的C# Uri.EscapeDatastring() 等效项),您必须使用 Java 的 URL 或 URI 类来转义稍后可以在 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

于 2013-10-01T06:25:15.663 回答
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>

在这里您可以找到如何做到这一点:

因此,以前未触发错误的请求现在可能会发生请求验证错误。要恢复到 ASP.NET 2.0 请求验证功能的行为,请在Web.config文件中添加以下设置:

<httpRuntime requestValidationMode="2.0"/>

此外,如果您想对 xml 字符串进行编码,您可以在 java 中使用更简单的方法:

encodedString = UrlEncoder.encode(unencodedString)

并在 C# 中使用以下方法对其进行解码:

unencodedString = Uri.UnescapeDataString(encodedString);
于 2013-10-01T16:40:02.147 回答