具有查询字符串的c#webapi

时间:2018-12-09 17:21:02

标签: c# asp.net asp.net-web-api routing query-string

我有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

我收到如下错误:

  

从以下位置检测到潜在危险的Request.Path值:   客户(&)。必须遵循哪些步骤?配置文件中的任何更改,   任何属性等。

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

如果您不希望第一种请求

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);
    }
}

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

答案 1 :(得分:0)

过多的参数不是一个好的设计,它可以反映为参数类。

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);
}