Web Api C#.net params POST

时间:2017-03-13 11:43:22

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

我正在尝试通过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参数发送,以便不会出现在网址中?

谢谢大家

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

试试这个

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

您的siteinfo模型

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

最后从动作标题中删除你的路线并在webapiconfig.cs中添加这样的新路线(并更改js文件集params liek this / param1 / param1)

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