如何在web api服务中发送两个或更多参数?

时间:2017-09-03 19:25:40

标签: c# api http post parameters

我有一个使用web api MVC的web服务方法,我有一个方法“Create”,这个接收两个参数(Objects)但是当我尝试从SOAP UI调用这个方法时显示这个错误:

  

{      “message”:“错误。”,      “exceptionMessage”:“no se pueden enlazarvariosparámetros('modelPerson'y'modelCodeory')al contenido de la solicitud。”,      “exceptionType”:“System.InvalidOperationException”,      “stackTrace”:“en System.Web.Http.Controllers.HttpActionBinding.ExecuteBindingAsync(HttpActionContext actionContext,CancellationToken cancellationToken)\ r \ n en System.Web.Http.Controllers.ActionFilterResult。   }

我的控制器api:

    [HttpPost]
    [Route("Create")]
    public IHttpActionResult Create(Person modelPerson, Category modelCategory)
    {
        try
        {
            new PersonBLL().Create(modelPerson, modelCategory);
            return Ok("success");
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    }

在soap UI POST方法中:

{
  "name": "pepe",
  "age": 23,
  "address" : "xxxx 233"
  "pets":{                               //-> person model
     "id": 3002,
     "alias" : "vovi"
   }
 }
 ,
 {
    "id" : 101                         //category model (i need only id)
 }

但是如果我只发送一个参数(modelPerson或categoryPerson),则调用工作正常,但使用两个参数不起作用:/

1 个答案:

答案 0 :(得分:1)

Web API不允许这样做。

相反,您可以使用包装两者的单个对象:

[HttpPost]
[Route("Create")]
public IHttpActionResult Create(CreateParameters parameters)
{
    try
    {
        new PersonBLL().Create(parameters.Person, parameters.Category);
        return Ok("success");
    }
    catch (Exception ex)
    {
        return BadRequest(ex.Message);
    }
}
{
    "Person": {
        "name": "pepe",
        "age": 23,
        "address": "xxxx 233",
        "pets": {
            "id": 3002,
            "alias": "vovi"
        }
    },
    "Category": {
        "id": 101
    }
}

请求看起来像这样:

new String[] { this }