通过Fiddler发送POST请求到asp.net mvc动作

时间:2013-06-20 13:55:21

标签: c# asp.net asp.net-mvc http fiddler

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

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,因为我的参数值可能很长。事实上,我估计偶尔,总网址长度可能是20000个字符。无论如何,当我尝试发布数据时,我得到400 error。为了调试这个,我试图弄清楚如何在POST中模拟Fiddler

假设我通过查询字符串传递值,如上所示,我将在Fiddler中输入什么值?在Composer标签中,我不确定要为Request Headers区域输入什么内容。我也不完全确定要为网址输入什么内容。我不确定是否将整个网址放在那里,包括参数值,或者是否属于Request Headers

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

2 个答案:

答案 0 :(得分:47)

基本上所有参数都是URL的一部分,这是问题的根源。这是正在发生的事情:您正在达到URL长度限制,并收到“400错误请求”错误。在现实世界中,大多数Web浏览器不适用于长度超过2000个字符的URL。

要解决此问题,我建议您进行一些重构,以便将请求发布到网址http://www.example.com/customer/parameter1/orders或甚至http://www.example.com/customer/orders,并在请求正文中发送参数。以下是如何在Fiddler中测试此类请求:

  1. Composer标签上选择POST请求动词
  2. 将网址指定为

    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
    
  5. 在这个新案例中,您可以使用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);
    

答案 1 :(得分:6)

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

我就是这样做的:

  1. 打开Fiddler
  2. 转到我要重新发出命令的页面,即重复错误步骤,但在列表中查看请求
  3. 从列表中选择并右键单击,转到重播>重新发行和编辑
  4. 这会构建一个复制的请求,但会在发送之前点击一个断点(您将看到右侧的红色条)
  5. 在此之上,您可以通过双击Headers,QueryString等中的任何一个来编辑发送的值。
  6. 然后点击Run to Complete