首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性路由约束路由

属性路由约束路由
EN

Stack Overflow用户
提问于 2013-05-16 21:04:28
回答 1查看 362关注 0票数 2

我正在为WebApi使用http://attributerouting.net/ nuget包。下面是我的两个GET方法和route属性,分别用于list和一个特定的项目:

代码语言:javascript
复制
[GET("api/products/{tenantid}/{channelid}?{skip=0}&{take=20}&{status=1}")]
public IEnumerable<Product> Get(short tenantId, byte channelId, int status, int skip, int take)

[GET("api/products/{tenantid}/{channelid}/{id}")]
public Story Get(short tenantId, byte channelId, long id)

但在生成的帮助URI中,显示了三个GET选项。

代码语言:javascript
复制
GET api/products/{tenantid}/{channelid}?status={status}&skip={skip}&take={take} 
GET api/products/{tenantid}/{channelid}?id={id} 
GET api/products/{tenantid}/{channelid}/{id}

即使"id“不是第一个GET方法的参数。如何消除结尾带有"?id={id}“的中间URI?我想我需要一些约束,但是我不能从文档站点中找到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-17 04:23:14

  1. 要解决此问题,您可以对操作进行不同的命名。示例: GetAllProducts,GetProduct
  2. 您看到的问题是一个预期行为,因为ApiExplorer( HelpPage使用的)访问路由集合中的所有路由,并且对于每个路由,它都会检查从该路由可以到达哪些操作。现在,有了上述属性修饰的路由,路由集合中的路由很可能如下所示:

a. "api/products/{tenantid}/{channelid}",controller="Products",action = "Get“等...

b. "api/products/{tenantid}/{channelid}/{id}",controller="Products",action = "Get"...

现在对于路由'a.',ApiExplorer检查哪些动作可以到达,并且它注意到对于控制器'Products‘和动作'Get',有两个动作可以到达,并且它还尝试查看有多少参数来自路由路径本身,如果动作上有任何参数不是来自路由路径,它会假设它来自您看到的查询string...hence "?id={id}“。希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16588261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档