繁体   English   中英

远程服务器返回错误:(400)错误请求?

[英]The remote server returned an error: (400) Bad Request?

我正在尝试从网址获取响应,该网址必须是JSON,如下所示:

{“request_status”:“FAILURE”,“error_message”:“商家ID不正确”,“error_code”:“0”,“unique_order_id”:“”}

我在winForm中的click事件处理程序中使用此代码(它有5个文本框控件,每个处理一个特定的参数,我想在文本框textBoxResponse中接收JSON文件。

private void button1_Click(object sender, EventArgs e)
{
    WebRequest request = WebRequest.Create("http://test5.paymobsolutions.com/api/merchant/pay_order_online/");
    request.Method = WebRequestMethods.Http.Post;
    //request.Headers.Add("REF-1", "me1");
    //request.Headers.Add("REF-2", "me2");
    request.Proxy = null;
    using (var streamWriter = new StreamWriter(request.GetRequestStream()))
    {
        PaymentParamters paras = new PaymentParamters { c_cvv_U = textBoxCVV.Text, c_expiry_mm_U = textBoxExM.Text, c_expiry_yy_U = textBoxExY.Text, c_holder_name_U = textBoxHolderName.Text, c_pan_U = textBoxPAN.Text };

        string json = JsonConvert.SerializeObject(paras);
        streamWriter.Write(json);
        streamWriter.Flush();
        streamWriter.Close();
    }
    var response = request.GetResponse();
    using (var streamReader = new StreamReader(response.GetResponseStream()))
    {
        var result = streamReader.ReadToEnd();
        textBoxResponse.Text = result;
    }
}

但是会发生异常:

远程服务器返回错误:(400)错误请求

这个HTML工作正常,我想让我的winForm像这样:

<form method="post" action="http://test5.paymobsolutions.com/api/merchant/pay_order_online/">
    <input type="text" placeholder="pan"            name="c_pan_U" value="" />
    <input type="text" placeholder="holder_name"    name="c_holder_name_U" value ="" />
    <input type="text" placeholder="expiry_mm"      name="c_expiry_mm_U" value="" />
    <input type="text" placeholder="expiry_yy"      name="c_expiry_yy_U" value="" />
    <input type="text" placeholder="cvv"            name="c_cvv_U" value="" />
    <input type="submit" />
</form>

HTML表单帖子将POST为application/x-www-form-urlencodedmultipart/form-data 您的服务调用正在尝试编写application/json 这可能是你问题的症结所在。

该服务是否接受JSON(检查它的接受标头)? 如果是这样,您需要在请求标头中设置它。

或者,将代码更改为发布x-www-form-urlencoded。 有关示例请参阅此帖子,下面已发布了一个片段供您参考。

var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");

var postData = "thing1=hello";
    postData += "&thing2=world";
var data = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM