在将参数传递给Web API控制器时,是否有关于是否使用Route数据的规则 http://domain/api/employees/1 或者使用查询字符串 http://domain/api/employees?id=1 是完全基于意见还是有任何指导方针?一个人比另一个人有什么优势吗? 我发现了很多关于如何实现Route数据或查询字符串的问题,但我不知道当两个人都能完成这项工作时我应该使用哪一个。
答案 0 :(得分:2)
如果有许多可选的参数,查询字符串很好。与默认行为或路由不同,如果您具有可以在没有任何先前参数的情况下存在的参数,这将非常有用。这方面的一个例子可能是包含许多字段的搜索功能。
/q=test%20query&city=some%20city&state=some%20state&occupation=programmer
/q=foo%20bar&occupation=dancer&state=CA
与路由的默认行为不同,查询字符串参数可以按任何顺序和任意组合提供。
路由使更多SEO友好的URL成为可能。但是通过内置路由,"可选"参数仅表示最右边的参数是可选的。
/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
请注意,两者之间存在一个主要区别。路由不处理查询字符串参数(默认情况下,无论如何)。他们之所以使用action方法是因为它们是由value providers提供的。您可以通过更改值提供程序工厂的顺序来控制查询字符串或路由值是否优先(对于整个应用程序)。
答案 1 :(得分:1)
这实际上取决于您希望网址的外观。查询字符串需要少一点的设置,如果你真的不关心URL的外观,那么它可以很好地工作,而Route Data非常适合创建漂亮而直观的URL。
如果可能的话,坚持路由数据可能是一个更好的主意,但是在很多情况下你需要传递比路径数据更多的数据,同时仍然保持良好的直观质量。这一切都归结为背景。
在您的员工示例中,可以使用路线数据并仍然保持这种漂亮的质量,我个人认为这样做会更直观,更好看,但最终这是您的号召。
希望这有帮助。