首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WebAPI多个Put/Post参数

WebAPI多个Put/Post参数
EN

Stack Overflow用户
提问于 2013-01-19 04:54:50
回答 10查看 412.9K关注 0票数 174

我正在尝试在WebAPI控制器上发布多个参数。一个参数来自URL,另一个来自正文。下面是url:/offers/40D5E19D-0CD5-4FBD-92F8-43FDBB475333/prices/

下面是我的控制器代码:

代码语言:javascript
复制
public HttpResponseMessage Put(Guid offerId, OfferPriceParameters offerPriceParameters)
{
    //What!?
    var ser = new DataContractJsonSerializer(typeof(OfferPriceParameters));
    HttpContext.Current.Request.InputStream.Position = 0;
    var what = ser.ReadObject(HttpContext.Current.Request.InputStream);

    return new HttpResponseMessage(HttpStatusCode.Created);
}

body的内容采用JSON格式:

代码语言:javascript
复制
{
    "Associations":
    {
        "list": [
        {
            "FromEntityId":"276774bb-9bd9-4bbd-a7e7-6ed3d69f196f",
            "ToEntityId":"ed0d2616-f707-446b-9e40-b77b94fb7d2b",
            "Types":
            {
                "list":[
                {
                    "BillingCommitment":5,
                    "BillingCycle":5,
                    "Prices":
                    {
                        "list":[
                        {
                            "CurrencyId":"274d24c9-7d0b-40ea-a936-e800d74ead53",
                            "RecurringFee":4,
                            "SetupFee":5
                        }]
                    }
                }]
            }
        }]
    }
}

知道为什么默认绑定不能绑定到控制器的offerPriceParameters参数吗?它始终设置为null。但我可以使用DataContractJsonSerializer从身体中恢复数据。

我还尝试使用参数的FromBody属性,但也不起作用。

EN

回答 10

Stack Overflow用户

发布于 2016-05-18 19:20:35

代码语言:javascript
复制
[HttpPost]
public string MyMethod([FromBody]JObject data)
{
    Customer customer = data["customerData"].ToObject<Customer>();
    Product product = data["productData"].ToObject<Product>();
    Employee employee = data["employeeData"].ToObject<Employee>();
    //... other class....
}

使用引用

代码语言:javascript
复制
using Newtonsoft.Json.Linq;

使用JQuery Ajax请求

代码语言:javascript
复制
var customer = {
    "Name": "jhon",
    "Id": 1,
};
var product = {
    "Name": "table",
    "CategoryId": 5,
    "Count": 100
};
var employee = {
    "Name": "Fatih",
    "Id": 4,
};

var myData = {};
myData.customerData = customer;
myData.productData = product;
myData.employeeData = employee;

$.ajax({
    type: 'POST',
    async: true,
    dataType: "json",
    url: "Your Url",
    data: myData,
    success: function (data) {
        console.log("Response Data ↓");
        console.log(data);
    },
    error: function (err) {
        console.log(err);
    }
});
票数 100
EN

Stack Overflow用户

发布于 2013-01-19 18:35:15

WebAPI本身不支持绑定多个POST参数。正如科林指出的那样,我的blog post中概述了许多限制,他引用了这些限制。

可以通过创建自定义参数绑定器来解决此问题。这样做的代码是丑陋和复杂的,但我已经在我的博客上发布了代码和详细的解释,准备在这里插入到项目中:

Passing multiple simple POST Values to ASP.NET Web API

票数 67
EN

Stack Overflow用户

发布于 2015-07-10 23:22:02

如果使用属性路由,则可以使用FromUri和FromBody属性。

示例:

代码语言:javascript
复制
[HttpPost()]
[Route("api/products/{id:int}")]
public HttpResponseMessage AddProduct([FromUri()] int id,  [FromBody()] Product product)
{
  // Add product
}
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14407458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档