You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web API控制器如何接收GET请求中的空字符串参数?

解决Web API传递空字符串参数的问题

针对你遇到的路由参数无法接受空字符串或省略参数的问题,可通过以下几种方式解决:

方法1:将路由参数设为可选

修改路由模板,把{name}改为{name?}表示该参数可选,同时将方法参数声明为可空字符串(string?),这样就能接受空字符串或省略参数的请求:

// GET: api/Medikamente/search/Name/Ibuprophen 或 api/Medikamente/search/Name/
[HttpGet("search/Name/{name?}")]
public async Task<ActionResult<IEnumerable<Medikament>>> Search(string? name)
{
    // 处理空值情况:如果name为空或null,返回所有Medikament
    var query = string.IsNullOrEmpty(name) 
        ? _context.Medikament 
        : _context.Medikament.Where(x => x.Name.Contains(name));
    
    return await query.ToListAsync();
}

此时请求https://localhost/api/mycontroller/search/Name/(末尾带斜杠)或https://localhost/api/mycontroller/search/Name(不带参数段)都能正常进入方法,name会被设为null。

方法2:改用查询参数传递

如果业务允许,可将参数改为查询参数,这样传递空字符串更直观,也避免路由匹配问题:

// GET: api/Medikamente/search/Name?name=Ibuprophen 或 api/Medikamente/search/Name?name= 或 api/Medikamente/search/Name
[HttpGet("search/Name")]
public async Task<ActionResult<IEnumerable<Medikament>>> Search([FromQuery] string? name)
{
    var query = string.IsNullOrEmpty(name) 
        ? _context.Medikament 
        : _context.Medikament.Where(x => x.Name.Contains(name));
    
    return await query.ToListAsync();
}

这种方式下,请求https://localhost/api/mycontroller/search/Name?name=会将name设为空字符串,不带name参数则name为null。

方法3:强制允许路由参数为空字符串(.NET 6+)

如果你需要保持路由结构,同时接受空字符串参数,可结合[FromRoute]特性显式设置参数非必填:

[HttpGet("search/Name/{name}")]
public async Task<ActionResult<IEnumerable<Medikament>>> Search([FromRoute(Required = false)] string? name)
{
    var query = string.IsNullOrEmpty(name) 
        ? _context.Medikament 
        : _context.Medikament.Where(x => x.Name.Contains(name));
    
    return await query.ToListAsync();
}

不过这种方式需要注意,部分版本的路由系统可能对末尾空段的匹配有差异,优先推荐前两种方法。

内容的提问来源于stack exchange,提问作者MakePeaceGreatAgain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:13:21