【问题标题】:Web Api C# .net params POSTWeb Api C# .net 参数 POST
【发布时间】:2017-08-03 10:05:39
【问题描述】:

我正在尝试通过 JavaScript 在 C# 中为我的 web api 发送产品列表,但我的 API 不接受这些产品。我该如何通过呢?

这是我的模特

public class ProductModels
{
    public int productId { get; set; }
    public string description { get; set; }
    public int quantity { get; set; }
    public decimal amount { get; set; }
}

和我的 API 端点

    [Route("api/pag_seguro/transactions/credit_card")]
    public IHttpActionResult DoTransactionWithCreditCard(ProductModels[] products, string senderHash, string cardHash)

在 Javascript 中,我尝试像这样发送它

data.products = [{ "productId": 1, "description": "tupperware", "quantity": 1, "amount": 29.80 }];

$.ajax({
    type: 'POST',
    url: url + '/api/pag_seguro/transactions/credit_card?cardHash=' + cardHash + '&senderHash=' + senderHash,
    data: data,
    success: function (response) {
        console.log(response);
    },
    dataType: 'json',
    async: false
});

还有关于这个端点...如何将 senderHash 和 cardHash 作为 POST 参数发送,以便不会出现在 web url 中?

谢谢大家

【问题讨论】:

  • 为什么不创建一个包含所有内容的复杂对象(包括产品数组、卡片哈希和发件人哈希)?
  • 我无法将对象发送到 api,或者至少我做错了,如上所示。否则,发送 ProductModel 是正确的。对吗?

标签: javascript c# .net asp.net-web-api


【解决方案1】:

需要将请求中的内容类型设置为

contentType:"application/json"

另外,发送时使用JSON.stringify将数据转换为JSON格式。

试试这个代码:

$.ajax({
    type: 'POST',
    url: url + '/api/pag_seguro/transactions/credit_card?cardHash=' + cardHash + '&senderHash=' + senderHash,
    data: JSON.stringify(data),
    contentType: "application/json",
    success: function (response) {
        console.log(response);
    },
    dataType: 'json',
    async: false
});

【讨论】:

    【解决方案2】:

    试试这个

    public IHttpActionResult DoTransactionWithCreditCard([FromUri] SiteInfo, siteInfoProductModels[] products)
    

    你的站点信息模型是

    public class SiteInfo
        {
            public string senderHash { get; set; }
            public string cardHash { get; set; }
        }
    

    最后从动作标头中删除您的路由,并像这样在 webapiconfig.cs 中添加新路由(并更改 js 文件集参数,例如 /param1/param1)

    config.Routes.MapHttpRoute(
        name: "HashRoute",
        routeTemplate: "api/{controller}/{action}/{senderHash}/{cardHash}"
    );
    

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 2015-02-14
      • 2020-05-23
      相关资源
      最近更新 更多