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

c# – Web API 2 / MVC 5:属性路由将参数作为查询字符串传递,以

发布时间:2020-12-15 06:24:32 所属栏目:百科 来源:网络整理
导读:我一直在玩新的Web API 2(这看起来非常有前途的btw),但是我有点头疼让一些路由工作. 当我有GetAllUsers / GetUser(int id)时,所有的工作都很好,但是当我添加GetUserByName(string name)和/或GetUserByUsername(string username)时,事情开始令人毛骨悚然.我知
我一直在玩新的Web API 2(这看起来非常有前途的btw),但是我有点头疼让一些路由工作.
当我有GetAllUsers / GetUser(int id)时,所有的工作都很好,但是当我添加GetUserByName(string name)和/或GetUserByUsername(string username)时,事情开始令人毛骨悚然.我知道int将是第一个,并且我可以重新排列路由,但是让我们想象下面的情况:

用户可以拥有一个有效的用户名= 1234或者名称= 1234(我知道这不太可能,但是我们需要防止任何可能的情况),我们可能在数据库中有一个有效的1234 ID,所有的路由将被混合.

也许这是我们需要处理的新的WebAPI 2,所以我想我可以带来一个“解决方法”,通过过滤器作为查询字符串来定位同一个控制器中的不同操作,如api / users /?username = 1234 (GetUserByUsername)或api / users /?name = 1234(GetUserByName)

但是我无法使查询字符串进入…实际上,GetAllUsers抓到上面的任何querystring选项.

有没有人有任何建议/修复这种情况?

非常感谢

解决方法

您需要定义方法访问名称
[HttpGet("User")]
public async Task<UserViewModel> GetByName(string name)
[HttpGet("User")]
public async Task<UserViewModel> GetByUserName(string name)

//You can access like 
//- api/Users/User?name=someneme
//- api/Users/User?username=someneme

要么

[HttpGet("User")]
public async Task<UserViewModel> GetByAnyName(string name="",string username="")
//- api/Users/User?name=someneme
//- api/Users/User?username=someneme
//- api/Users/User?username=someneme&name=someone

更新
以上两者都可以很好地与其他路由前缀配置工作.

要么

[HttpGet("")]
public async Task<UserViewModel> GetAll()
[HttpGet("")]
public async Task<UserViewModel> Get(int id)
[HttpGet("")]
public async Task<UserViewModel> GetByName(string name)
[HttpGet("")]
public async Task<UserViewModel> GetByUserName(string name)

//You can access like 
//- api/Users/
//- api/Users/?id=123
//- api/Users/?name=someneme
//- api/Users/?username=someneme

(编辑:李大同)

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

    推荐文章
      热点阅读