2017-03-22 23 views
-1

虽然参数传递到网络API控制器, http://domain/api/employees/1 或使用查询字符串像 http://domain/api/employees?id=1 是它完全基于选项上是否有是否使用路由数据,如任何规则或是否有任何指引对此有何看法?一个人比另一个人有什么优势吗? 我发现了很多关于如何实现路由数据或查询字符串的问题,但我不知道在两者都能完成这项工作时应该使用哪一个。何时使用路由数据以及何时在ASP.NET Web API中使用查询字符串?

+0

那么,没有解释下投票是仁慈的。 – Iman

+1

这是一个基于意见的问题。这就是为什么你被低估了。 –

+0

这正是我想知道的,这只是偏好,还是有推理或任何背后的指导原则。谢谢你让我知道。 – Iman

回答

2

如果您有许多可选的参数,查询字符串很不错。与默认行为或路由不同,如果您的参数不存在任何前面的参数,则此参数非常有用。这方面的一个例子可能是许多领域的搜索功能。

/q=test%20query&city=some%20city&state=some%20state&occupation=programmer 
/q=foo%20bar&occupation=dancer&state=CA 

与路由的默认行为不同,查询字符串参数可以以任意顺序和任意组合提供。

路由使更多的搜索引擎优化友好的网址。但通过内置路由,“可选”参数仅表示最右边的参数是可选的。

/search/foo%20bar/CA/dancer 
/search/foo%20bar/CA 
/search/foo%20bar 

所以,你不会是能够做到:

/search/foo%20bar/dancer 

,因为它会把值“舞者”到路径值与“国家”路线的关键。

您可以扩展路由以制作可以按任意顺序提供的可选参数,但它是more involved to set up

/search/query/occupation/dancer/foo%20bar/state/CA/ 
/search/state/CA/query/foo%20bar 
/search/query/foo%20bar/occupation/dancer 

请注意两者之间有一个主要区别。查询字符串参数不由路由处理(无论如何,默认情况下)。他们之所以采用行动方法是因为他们是由value providers提供的。您可以通过更改值提供程序工厂的顺序来控制查询字符串或路由值是否优先(针对整个应用程序)。

+0

好的答案,第一段完美地总结了它。 –

1

这实际上只取决于你希望你的网址看起来如何。查询字符串需要稍微少一点的设置,并且如果您不关心URL的外观有多好,并且Route Data非常适合创建漂亮,直观的URL,

如果可能的话,坚持路线数据可能是一个更好的主意,但有很多情况下您需要传递比Route Data更多的数据,同时仍然保持良好的直观质量。这一切都归结于上下文。

在您的员工示例中,可以使用路线数据,并保留好看的质量,我个人认为这样做会更直观,更好看,但最终它是您的呼叫。

希望这会有所帮助。

相关问题