asp.net - 从 Azure 上的 ASP 返回到 Arduino 的 HTTP 动词无效

标签 asp.net azure arduino

我有一个 ASP 站点,它具有存储和检索值的简单工作。这是使用站点存储值的示例 URL:

http://oneurloranother.cloudapp.net/default.aspx?store=[{"name":"timsplate","values":[1,2,3,4]},{"name":"miwasplate","values":[2,1,4,3]}]

在运行良好的浏览器中,数据被存储。但我想从 Arduino 调用代码。我使用的样板代码改编自 Arduino wifi 库示例:

  client.println("GET /default.aspx?store=[{\"name\":\"timsplate\",\"values\":[1,2,3,4]},{\"name\":\"miwasplate\",\"values\":[2,1,4,3]}] HTTP/1.1");
  client.println("Host:oneurloranother.cloudapp.net");
  client.println("Connection: close");
  client.println();

但是我从服务器返回的响应是:

HTTP Error 400. The request verb is invalid.

如果我尝试 HEADPOST 而不是 GET 我仍然收到相同的错误。如果我错过了有效负载并仅使用此代码:

  client.println("GET /default.aspx HTTP/1.1");
  client.println("Host:oneurloranother.cloudapp.net");
  client.println("Connection: close");
  client.println();

然后响应很好 - 请求页面的 HTML。

谁能看出我做错了什么吗?

==========编辑==========

好吧,这让我头疼。我从 Arduino 论坛获得了一些其他建议,并重写了我的 HTTP 命令,以删除 ASP 代码中的 System.Web.Script.Serialization.JavaScriptSerializer 不需要的一些转义引号,并且将 HTTP 消息放在单独的行中并将其发送到控制台(以便我可以检查转义的引号是否正确)。该字符串看起来是正确的,但是,这是让我头疼的一点,单独声明 HTTP 消息的行为使它起作用! IE。此代码有效:

  String httpMssg = "GET /default.aspx?store=[{name:\"timsplate\",values:[1,2,3,4]},{name:\"miwasplate\",values:[2,1,4,3]}] HTTP/1.1";
  client.println(httpMssg);
  client.println("Host: oneurloranother.cloudapp.net");
  client.println("Connection: close");
  client.println();

而这会导致服务器回复HTTP错误400。请求谓词无效:

  client.println("GET /default.aspx?store=[{name:\"timsplate\",values:[1,2,3,4]},{name:\"miwasplate\",values:[2,1,4,3]}] HTTP/1.1");
  client.println("Host: oneurloranother.cloudapp.net");
  client.println("Connection: close");
  client.println();

这太疯狂了。我现在有了工作代码,但我很感兴趣;为什么第二个代码块会失败而第一个代码块会成功?

最佳答案

当我在浏览器中发出您的原始 URL 时,它会这样转义:http://oneurloranother.cloudapp.net/default.aspx?store=[{%22name%22:%22timsplate%22,%22values %22:[1,2,3,4]},{%22name%22:%22miwasplate%22,%22values%22:[2,1,4,3]}] 所以你可以尝试一下.

话虽如此,我对你的后续问题没有任何解释。这些对我来说看起来一模一样。那是什么编程语言?

关于asp.net - 从 Azure 上的 ASP 返回到 Arduino 的 HTTP 动词无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13866642/

相关文章:

.net - 带有确认电子邮件的 ASP.NET 成员资格提供程序

asp.net - 将 ASP.NET Web.config 从 3.5 更新到 4.0 的工具

c# - 如何在 Blazor 服务器应用程序中正确计算 SignalR 消息?

azure - 如何使用经过身份验证的调用者(服务主体)的身份从 Azure Function App 调用 protected API?

python - 使用 Python 最大限度地提高 Teensy 3.2 实时绘图数据的串行通信速度

linux - Intel Galileo - 启动时运行命令

javascript - 拦截asp :LInkButton postback for client side confirmation dialog?

azure - Azure 虚拟机的 Web 控制台访问权限?

java - 如何使用java在一定时间后自动将数据存储到mySql数据库?

javascript - 在 ASP.NET 中粘贴剪贴板上当前的文本