C# Web api解析FromQuery参数名称

C# Web api解析FromQuery参数名称,c#,rest,asp.net-core,asp.net-web-api,.net-core,C#,Rest,Asp.net Core,Asp.net Web Api,.net Core,我有严格的API路由要求。这必须是Get请求,并且无法更改路由。用户可以按姓名搜索人员,但也可以按姓名的一部分搜索: api/People?name=Tom-“Tom”可以位于名称的任何部分,忽略大小写 api/People?name:contains=Tom-“Tom”必须位于名称的开头,忽略大小写 api/People?name:exact=Tom-“Tom”必须区分大小写 它应该如何在控制器中实现 有一个带有3个参数的选项,可以改进吗 public async Task<IA

我有严格的API路由要求。这必须是Get请求,并且无法更改路由。用户可以按姓名搜索人员,但也可以按姓名的一部分搜索:

api/People?name=Tom-“Tom”可以位于名称的任何部分,忽略大小写

api/People?name:contains=Tom-“Tom”必须位于名称的开头,忽略大小写

api/People?name:exact=Tom-“Tom”必须区分大小写

它应该如何在控制器中实现

有一个带有3个参数的选项,可以改进吗

    public async Task<IActionResult> GetByName(
        [FromQuery(Name = "name")] string name, 
        [FromQuery(Name = "name:contains")] string beginName, 
        [FromQuery(Name = "name:exact")] string exactName)
公共异步任务GetByName(
[FromQuery(Name=“Name”)]字符串名称,
[FromQuery(Name=“Name:contains”)]字符串beginName,
[FromQuery(Name=“Name:exact”)]字符串exactName)

您可以使用自定义模型绑定,下面是一个演示: 名称模型:

public class NameModel {
        public string name { get; set; }
        public string beginName { get; set; }
        public string exactName { get; set; }
    }
控制器:

        [Route("/GetByName")]
        public async Task<IActionResult> GetByName([ModelBinder(typeof(NameBinder))]NameModel nameModel)
        {
            return Ok();
        }
结果:

您可以使用自定义模型绑定,下面是一个演示: 名称模型:

public class NameModel {
        public string name { get; set; }
        public string beginName { get; set; }
        public string exactName { get; set; }
    }
控制器:

        [Route("/GetByName")]
        public async Task<IActionResult> GetByName([ModelBinder(typeof(NameBinder))]NameModel nameModel)
        {
            return Ok();
        }
结果:

我可以建议“公共HttpResponseMessage Post([FromBody]FormDataCollection formbody)”吗。查看此链接了解详细信息谢谢,不幸的是,这必须是一个get请求,解决方案不适合我。我更正了描述。我将使用两个参数,如
name
operator
。我是否可以建议使用“public HttpResponseMessage Post([FromBody]FormDataCollection formbody)”。查看此链接了解详细信息谢谢,不幸的是,这必须是一个get请求,解决方案不适合我。我更正了描述。我将使用两个参数,如
name
operator