如何在asp.net webapi中绑定多个参数以进行操作?

时间:2015-10-15 10:06:08

标签: asp.net asp.net-web-api

我是一个新的asp.net web api,在asp.net web api中,我怎么能让它自动绑定多个动作参数,就像下面一样。

public class DemoController : ApiController
{
    public class DemoModel
    {
        public string X { get; set; }

        public string Y { get; set; }

        public int Z {get; set;}
    }

    [HttpPost]
    public DemoModel GetParameter(string x,string y,int z)
    {
        return new DemoModel(){X = x, Y=y, Z=z};
    }
}

在html页面中,我使用jquery ajax将数据发布到api,我得到了404 erorr。 我只是更改默认路线 默认值:

api/{controller}/{id}  

已更改:

api/{controller}/{action}/{id}

2 个答案:

答案 0 :(得分:0)

首先,您应该将参数包装到某种DTO(数据转换对象)模型中,然后转换为DemoModel而不是调用

return new DemoModel() {X = x, Y = y, Z = z}

您可以将操作的签名更改为以下内容:

[HttpPost]
public IHttpActionResult GetParameter(DemoModelDto model)
{
    if (ModelState.Valid)
    {
        var demoModel = DemoModel.FromDto(model);
        var url = Url.Route("{DefaultApi}", new {controller = "MyController", action = "MyAction", id = yourIdIfYouAreGeneratingIt});

        return Created(url, model);
    }

    return BadRequest(ModelState);
}

这里要发生的是ModelBinder将接收请求并提取那些x,y和z,并为您创建一个DemoModelDTO,您可以使用它来创建DemoModel。返回结果取决于ModelState是否有效。如果是,将返回Created,即OK的HTTP状态代码200(或Created的201),或者如果ModelState无效,则返回BadRequest这是400。

除此之外,如果您想将X,Y和Z作为URL参数发送,您需要发出如下请求:

POST http://localhost/Demo?x=1&y=2&z=3

使用您当前的实现或上面的实现将导致值传递给Web API。

答案 1 :(得分:0)

如果您希望能够传递动态参数而不在Action方法上显式指定它们,则使Action无参数,然后使用参数作为客户端上的查询字符串值进行调用。
然后您可以使用以下内容检索QS值:

 var queryVals = Request.RequestUri.ParseQueryString();    
 var x = queryVals["x"];
 var y = queryVals["y"];
 var z = queryVals["z"];