我是一个新的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}
答案 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"];