25

我有一个ASP.NET MVC网站。我的一条路线是URL采用 5 个参数的路线。为了便于说明,这些参数被命名为parameter1parameter2parameter3parameter4parameter5。目前,我正在一些C#代码中构建一个 URL,该 URL 将POST通过WebClient. 该代码如下所示:

WebClient myWebClient = new WebClient();
myWebClient.UploadStringCompleted += myWebClient_UploadStringCompleted;

string url = "http://www.example.com/customer/" + parameter1 + "/orders/" + parameter2 + "/" + parameter3 + "/" + parameter4 + "/" + parameter5;
myWebClient.UploadStringAsync(new Uri(url, UriKind.Absolute));

我相信该UploadString方法可以实现POST. 我需要做一个POST,因为我的参数值可能很长。事实上,我估计偶尔,总的 url 长度可能是 20000 个字符长。无论如何,400 error当我尝试发布我的数据时,我会得到一个。为了调试这个,我试图弄清楚如何模拟一个POSTin Fiddler

假设我通过如上所示的查询字符串传递值,我输入什么值Fiddler?从Composer选项卡中,我不确定要为该Request Headers区域输入什么。我也不完全确定要为 url 输入什么。我不确定我是否将整个 URL 放在那里,包括参数值,或者它们是否属于Request Headers.

我需要输入什么Fiddler,以便调试我的问题?

4

2 回答 2

47

基本上,您的所有参数都是 URL 的一部分,这是您问题的根源。这是发生了什么:您达到了 URL 长度限制,并收到“400 Bad request”错误。在现实世界中,大多数 Web 浏览器无法处理超过 2000 个字符的 URL。

为了解决这个问题,我建议进行一些重构,以便将请求发布到 URL http://www.example.com/customer/parameter1/orders,甚至http://www.example.com/customer/orders在请求正文中发送参数。以下是在 Fiddler 中测试此类请求的方法:

  1. Composer选项卡上选择POST请求动词
  2. 将 URL 指定为

    http://www.example.com/customer/parameter1/orders

    或者

    http://www.example.com/customer/orders

  3. Request Headers部分中,您可以设置内容类型标题,例如

    Content-Type: application/x-www-form-urlencoded
    

    或您可能需要的任何其他标题。或者只是将其留空,这将适用于您的情况。

  4. 最后在Request Body字段中以查询字符串形式列出您的参数

    parameter1name=parameter1value&parameter2name=parameter2value
    

在这种新情况下,您可以使用以下方式发送此类请求WebClient

WebClient myWebClient = new WebClient();
myWebClient.UploadStringCompleted += myWebClient_UploadStringCompleted;

string url = "http://www.example.com/customer/orders";
string data = "parameter1name=parameter1value&parameter2name=parameter2value";

myWebClient.UploadStringAsync(new Uri(url, UriKind.Absolute), data);
于 2013-06-20T14:14:35.850 回答
6

我只是模仿发送的确切请求。

我就是这样做的:

  1. 打开提琴手
  2. 转到我要重新发出命令的页面,即重复错误步骤但注意列表中的请求
  3. 从列表中选择它并右键单击,转到重播 > 重新发布和编辑
  4. 这构建了一个复制的请求,但在发送之前遇到了一个断点(您将看到右侧的红色条)
  5. 在此之上,您可以通过双击 Headers、QueryString 等中的任何一个来编辑发送的值
  6. 然后点击运行完成
于 2013-06-20T14:18:49.217 回答