加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 多个可选查询字符串参数REST API GET

发布时间:2020-12-15 04:18:39 所属栏目:百科 来源:网络整理
导读:我正在使用web api 2来实现一个宁静的服务.在对最佳实践进行一些研究之后,每个人似乎都对如何做以下事情有不同的看法.我有一个GET public HttpResponseMessage Get(string crewId,string shiftDate,int offset = 1,int limit = 10) 此GET方法返回一个列表.有
我正在使用web api 2来实现一个宁静的服务.在对最佳实践进行一些研究之后,每个人似乎都对如何做以下事情有不同的看法.我有一个GET
public HttpResponseMessage Get(string crewId,string shiftDate,int offset = 1,int limit = 10)

此GET方法返回一个列表.有多种方法可以从此方法获取数据.

>只有船员才能获得
>仅通过shiftDate获取
要么
>通过crewId和shiftDate获取

你(1)将crewId和shiftDate标记为可选吗?

public HttpResponseMessage Get(string crewId = null,string shiftDate = null,int limit = 10)

然后有一堆if语句来检查填充的内容和未填充的内容以便能够执行操作

if(crewId != null && shiftDate == null){
  // Get by crewId
}else if(crewId == null && shiftDate != null){
  // Get By shiftDate
}else if(crewId != null && shiftDate != null){
  // Get By crewId and shiftDate
}

对我来说这看起来很疯狂,特别是如果你有很多参数,你的代码中会有太多“if”语句.

你(2)有不同的获取?

public HttpResponseMessage GetByCrewId(string crewId,int limit = 10)
public HttpResponseMessage GetByShiftDate(string shiftDate,int limit = 10)
public HttpResponseMessage GetByCrewIdShiftDate(string crewId,int limit = 10)

然后你将URI路由映射到方法

> … / api / GetByCrewId?crewId = 1234
> … / api / GetByShiftDate?shiftDate = 1111-11-11
> … / api / GetByCrewIdShiftDate?crewId = 1234& shiftDate = 1111-11-11

选项2是否宁静?

或者有更好的选择(3).

上述两个选项都可以确保我使用最佳实践并遵循REST标准.看起来我错过了什么,希望你能把我放在正确的方向.

解决方法

您不希望选项(2) – 在您的URL中想要名词是RESTful.

所以你希望你的网址看起来像:

/api/items/?crewId=1234&shiftDate=1111-11-11

(根据’Crew’和’Shift’参数名称,我无法弄清楚你的物品是什么.什么有船员和轮班日期?钓鱼之旅?如果是这样,网址会更好/ / api ?/钓鱼人次/ crewId = ….&放大器; shiftDate = …

至于控制器,我会去做类似的事情:

public HttpResponseMessage Get(string crewId = null,int limit = 10) {

    return dataSource.Where(x=> (x.CrewId == crewId || crewId == null)
            && (x.ShiftDate == shiftDate || shiftDate == null));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读