在 ASP.NET Web API 中何时使用路由数据以及何时使用查询字符串?

When to use Route data and when to use query string in ASP.NET Web API?

在给web API controller传递参数时,有没有规定是否使用Route数据,比如 http://domain/api/employees/1 或者使用查询字符串 http://domain/api/employees?id=1 它完全基于意见还是对此有任何指导方针?其中一个比另一个有什么优势吗? 我发现了很多关于如何实现路由数据或查询字符串的问题,但我不知道我应该使用哪一个来完成这项工作。

这实际上取决于您希望 URL 看起来如何。如果您真的不关心 URL 的外观有多好,查询字符串需要的设置少一些并且可以很好地工作,而路由数据非常适合创建漂亮直观的 URL。

如果可能的话,坚持使用路由数据可能是一个更好的主意,但在许多情况下,您需要传递比路由数据所能容纳的更多的数据,同时仍然保持良好的直观质量。这一切都真正归结为上下文。

在你的员工示例中,可以使用 Route Data 并仍然保留那种好看的质量,我个人认为这样做会更直观、更好看,但最终还是你的打电话。

希望对您有所帮助。

如果您有许多可选参数,查询字符串就很好。与默认行为或路由不同,如果您的参数可以在没有任何前面参数的情况下存在,这将很有用。这方面的一个例子可能是具有许多字段的搜索功能。

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

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

路由可生成对 SEO 更友好的 URL。但是对于内置路由,"optional"个参数只表示最右边的参数是可选的。

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

所以,你将无法做到:

/search/foo%20bar/dancer

因为它会将值 "dancer" 放入带有 "state" 路由键的路由值中。

您可以扩展路由以制作可以按任何顺序提供的可选参数,但它是

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

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