【问题标题】:How can I check to see if an http request has no query strings in ASP.Net Core web API如何检查 http 请求是否在 ASP.Net Core Web API 中没有查询字符串
【发布时间】:2017-07-08 16:44:46
【问题描述】:

我正在使用带有可选查询字符串参数的 REST 动词来开发 ASP.Net Core Web API。

例如,API 调用如下所示;

http://localhost:5010/servicetypecode?stc=123

http://localhost:5010/servicetypecode?mailclasscode=fc

我正在使用这样的代码来设置查询字符串

    public IActionResult Get([FromQuery] string mailclasscode, [FromQuery] string stc) { ... }

因此,在我的方法主体中,我正在像这样单独评估每个字符串...

    if (!string.IsNullOrEmpty(mailclasscode)) { ... }


    if (!string.IsNullOrEmpty(stc)) { ... }

但是,我想允许我的用户直接对 API 进行 GET,而不提供查询字符串参数,并返回所有记录的列表,未经过滤。

所以这样的电话;

http://localhost:5010/servicetypecode

但我不希望在我的方法体中这样做,特别是如果我有很多查询字符串参数;

if (string.IsNullOrEmpty(mailclasscode) && string.IsNullOrEmpty(stc)) { ... }

有没有一种方法可以简单地确定是否没有提供查询字符串参数而不评估每个可能的查询字符串参数?

另外,在我要传递许多不同的查询字符串参数的情况下,有没有比测试每个可能的参数更好的方法来评估查询字符串参数?

提前感谢您提供的任何帮助。

【问题讨论】:

    标签: httprequest query-string asp.net-core-webapi request.querystring querystringparameter


    【解决方案1】:

    您可以检查传入的请求。

    if (this.HttpContext.Request.QueryString.HasValue)
    

    另外需要说明的是,如果查询字符串参数很多,可以在方法签名中使用单个类而不是多个参数。

    【讨论】:

    • 阿特里,谢谢。这非常有效。我问的问题的另一部分更多是关于处理多个查询字符串参数的更好方法,而不仅仅是在方法主体中使用多个 if 语句(无论我是使用多个查询字符串还是方法签名中的一个类)。我正在尝试使用单个 GET 方法,但提供多个过滤选项,因此,目前,我正在使用多个 if 语句测试每个可能的查询字符串参数。这可行,但看起来有点混乱。
    • 如果您希望做更多基于查询的 api,就像数据访问 api 一样,您可以使用 IQueryable 和有限或完整的 OData 实现。此外,您可以查看 GraphQL。这两个框架都会接受您返回的 IQueryable 并应用必要的过滤器。
    猜你喜欢
    • 2016-11-20
    • 2019-12-07
    • 2023-03-13
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多