C# Web API读取含点(.)查询字符串参数的控制器方法示例
C# Web API读取带点查询字符串参数的控制器示例
下面提供几种可行的实现方式,满足读取带点(.)的查询参数需求:
1. 直接在方法参数中绑定指定名称的查询参数
通过[FromQuery(Name = "xxx")]特性显式指定查询参数的完整名称(包含点),直接绑定到方法参数:
[ApiController] [Route("api")] public class TestController : ControllerBase { [HttpGet("test")] public IActionResult GetProducts([FromQuery(Name = "product.one")] string productOne, [FromQuery(Name = "product.two")] string productTwo) { var result = new { ProductOne = productOne, ProductTwo = productTwo }; return Ok(result); } }
2. 使用强类型模型绑定
当查询参数较多时,可定义强类型模型,并通过[FromQuery(Name = "xxx")]为属性指定对应的带点参数名:
定义参数模型
public class ProductQueryParams { [FromQuery(Name = "product.one")] public string One { get; set; } [FromQuery(Name = "product.two")] public string Two { get; set; } }
控制器方法实现
[ApiController] [Route("api")] public class TestController : ControllerBase { [HttpGet("test")] public IActionResult GetProducts([FromQuery] ProductQueryParams queryParams) { var result = new { ProductOne = queryParams.One, ProductTwo = queryParams.Two }; return Ok(result); } }
3. 直接读取Request.Query集合
如果不需要模型绑定,也可以直接从Request.Query中按带点的参数名取值:
[ApiController] [Route("api")] public class TestController : ControllerBase { [HttpGet("test")] public IActionResult GetProducts() { string productOne = Request.Query["product.one"]; string productTwo = Request.Query["product.two"]; var result = new { ProductOne = productOne, ProductTwo = productTwo }; return Ok(result); } }
以上三种方式都能正确读取http://xxxxxxxx.xxx/api/test?product.one=soft&product.two=hardware中的带点查询参数,可根据实际场景选择合适的实现方式。
内容的提问来源于stack exchange,提问作者hsn
相关产品推荐
相关产品推荐

