带有查询字符串的c#webapi



我有WebApi-baed web服务,比如:

public class ControllerName : ApiController
{
[Route("api/ControllerName/{p1}/{p2}/{p3}/{p4}/{p5}")]
public string GetItemByNameAndId(string p1, string p2, string p3, string p4, string p5)
{
}
}

这种类型的请求正在工作:

host/api/ControllerName/1/2/3/4/5

但我想要这种类型的请求:

host/api/ControllerName/&p1=1&p2=2&p3=3&p4=4&p5=5

我收到错误,如:

从客户端(&(。必须遵循哪些步骤?配置文件中的任何更改,任何属性等

感谢您抽出时间。

如果您不想要第一种类型的请求

host/api/ControllerName/1/2/3/4/5

然后将它们从路线模板中删除

[RoutePrefix("api/ControllerName")]
public class ControllerName : ApiController {
//GET api/ControllerName?p1=1&p2=2&p3=3&p4=4&p5=5
[HttpGet]
[Route("")]
public IHttpActionResult GetItemByNameAndId(string p1, string p2, string p3, string p4, string p5) {
//...
return Ok(someResult);
}
}

以便查询字符串版本将映射到控制器操作。

参数太多不是一个好的设计,它可能会被引用到一个参数类。

public class ParamClass {
public string P1 { get; set; }
public string P2 { get; set; }
public string P3 { get; set; }
public string P4 { get; set; }
public string P5 { get; set; }
}

在你的api控制器中,像这样使用它:

//GET api/ControllerName?host/api/ControllerName?p1=1&p2=2&p3=3&p4=4&p5=5
[HttpGet]
[Route("")]
public IHttpActionResult GetItemByNameAndId([FromUri(PreFix="")] ParamClass param) {
//...
return Ok(someResult);
}

最新更新