【问题标题】:POST json to another url将 json 发布到另一个 url
【发布时间】:2016-09-10 23:03:48
【问题描述】:

我有一个问题,因为我需要将一些 json 发送到一个 url。当我将所有 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");
}

编辑 - 更新(此处错误):

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

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    我认为有几件事,你必须解决:

    首先,您显然是在尝试创建一个资源(通常是 POST 或 PUT,在 REST-words 中发言,但您使用的是 WebClientDownloadString-method @ 987654322@。所以我认为您可能应该使用 POST 或 PUT,但选择哪一个完全取决于您正在联系的 Web 服务。

    那么你似乎弄错了Content-Type-header 并试图将有效负载打包在那里。负载 - 您的客户 JSON - 必须放入请求的正文中。

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

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

    但无论如何,对于发出 HTTP 请求,我建议您使用 HttpClient 代替 WebClient。你通常会这样做:

    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);
    }
    

    编辑:

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

    关于您遇到的编译错误,我更新了上面截取的代码。我选择的变量名称有误。请注意,您删除了关键字await,正如我从您的屏幕截图中看到的那样。请重新输入。如果编译器报错,很可能是你项目的 .NET 框架版本低于 4.5,这是使用 async/await 所必需的。

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

    【讨论】:

    • 感谢您的宝贵时间。对不起,我回答有点晚了。但我不使用 Quickpay 或 paypal。这两种解决方案无法满足我在我的网站上对会员区域的要求。我知道他们在 Github 上有一些东西,但他们没有提供我可以在我的网站上使用会员资格的服务。我刚刚发布并用谷歌搜索了所有可能的方法来找到我认为似乎很简单的解决方案。然后,您的代码会给出错误 HTTPClient 并说我不等待的用户。不幸的是。
    • 那么,您能说出您尝试使用哪个服务吗?有公开的 api 参考吗?您使用 HttpClient 遇到的错误是什么?关键字 await 未知?您可以通过更新项目的 .NET 框架版本来解决此问题。
    • 我可以看到它,谢谢你的回答。我有 .Net Framework 4.6。
    • 您现在可以编译还是遇到任何其他错误?
    • 不,在我删除 await 之后,它似乎有效。并感谢您的帮助!希望你能给我一个 +1 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多