POST json到另一个url

时间:2016-05-14 21:43:31

标签: c# json json.net

我有一个问题,因为我需要将一些json发送到网址。当我将所有json和令牌发送到页面时。

然后系统中将没有内容JSON值。

我已检查过是否有某些内容并且它存在,但它发送的只是不喜欢json值。

string apiKeyToken = model.reepaytoken; // TOKEN HERE.

string URLLink = APIClassPay.HelperPay.CreateCustomerURL;//URL to send it json to.

WebClient client = new WebClient();
            //JSON coming here!
var JSONCustomer = APIClassPay.HelperPay.CreateCustomer(model.Brugernavn, model.Adresse, model.Byen, model.Postnr.ToString(), model.Mobil.ToString(), model.Fornavn, model.Efternavn);
client.Headers.Add("text/json", JSONCustomer);
client.Headers.Set("X-Auth-Token", apiKeyToken);
string reply = client.DownloadString(URLLink);

当我吹我的json看起来像这样。

[HttpPost]
public ActionResult information(BuyMedlemskabViewModel model)
{
    DataLinqDB db = new DataLinqDB();
    var Pric = db.PriceValues.FirstOrDefault(i => i.id == model.HiddenIdMedlemskab);
    if (Pric != null)
    {
        string _OrderValue = DateTime.Now.Year + Helper.Settings.PlanValue();
        Session[HelperTextClass.HelperText.SessionName.OrderId] = _OrderValue;

        Session[HelperTextClass.HelperText.SessionName.FakturaId] = model.HiddenIdMedlemskab;

        Session[HelperTextClass.HelperText.SessionName.fornavn] = model.Fornavn;
        Session[HelperTextClass.HelperText.SessionName.efternavn] = model.Efternavn;
        Session[HelperTextClass.HelperText.SessionName.Adresse] = model.Adresse;
        Session[HelperTextClass.HelperText.SessionName.Post] = model.Postnr;
        Session[HelperTextClass.HelperText.SessionName.Byen] = model.Byen;
        Session[HelperTextClass.HelperText.SessionName.Mobil] = model.Mobil;


        string apiKeyToken = model.reepaytoken;.

        string URLLink = APIClassPay.HelperPay.CreateCustomerURL;//URL to send it json to.

        WebClient client = new WebClient();
        //JSON coming here!
        var JSONCustomer = APIClassPay.HelperPay.CreateCustomer(model.Brugernavn, model.Adresse, model.Byen, model.Postnr.ToString(), model.Mobil.ToString(), model.Fornavn, model.Efternavn);
        client.Headers.Add("text/json", JSONCustomer);
        client.Headers.Set("X-Auth-Token", apiKeyToken);
        string reply = client.DownloadString(URLLink);


    }
    return RedirectToAction("information");
}

编辑 - 更新(错误在这里):

enter image description here

ReePay API参考:https://docs.reepay.com/api/

1 个答案:

答案 0 :(得分:1)

我认为有一些事情,你必须解决:

首先,您显然正在尝试创建资源(通常是POST或PUT,在REST-words中发言,但您正在使用WebClient的{​​{ 1}} - 方法which performs a GET。所以我认为您应该使用POST或PUT,但选择哪一个完全取决于您正在联系的Web服务。

然后你似乎弄错了DownloadString - 标题并试图将有效载荷打包在那里。有效负载 - 您的客户JSON - 必须放入请求的正文中。

根据您之前的问题,我假设您尝试联系的服务是PayPalQuickPay。为了进一步帮助您解决这个问题,如果您可以指定使用哪个问题,将会很有帮助。

如果是QuickPay,请注意您可以使用official .NET client而不是自己使用Content-Type

但无论如何,在发出HTTP请求时,我建议您使用HttpClient来支持WebClient。你通常会这样做:

WebClient

修改

正如您在评论中澄清的那样,您使用的服务是Reepay。如果您查看create customer method的文档,可以看到必要的HTTP方法是POST。因此,上面的代码段通常应该适合。

关于您遇到的编译错误,我更新了上面的代码。我选择的变量名中有一个错误。请注意,您从屏幕截图中删除了关键字using (var httpClient = new HttpClient()) { var request = new HttpRequestMessage(HttpMethod.Post, APIClassPay.HelperPay.CreateCustomerURL); request.Headers.Add("X-Auth-Token", apiKeyToken); request.Headers.Add("Content-Type", "application/json"); request.Content = new StringContent(JSONCustomer); var response = await httpClient.SendAsync(request); } 。请重新输入。如果编译器抱怨它,那么项目的.NET框架版本很可能小于4.5,这是使用async / await所必需的。

因此,您应该将项目的.NET框架版本最好更新到版本4.6.1,因为支持4.5的Microsoft recently announced已停止使用。看看here如何做到这一点。