我正在使用.Net MVC4 Web API(希望)实现RESTful api . 我需要将一些参数传递给系统并让它执行一些操作,然后返回一个对象列表作为结果 . 具体来说,我传递了两个日期并返回它们之间的记录 . 我还跟踪返回的记录,以便后续调用不会在系统中重新处理 .
我考虑过几种方法:
-
将params序列化为单个JSON字符串并在API中将其分开 . http://forums.asp.net/t/1807316.aspx/1
-
在查询字符串中传递params .
What is best way to pass multiple query parameters to a restful api? -
在路线中定义参数:api / controller / date1 / date2
-
使用POST本身允许我传递带params的对象 .
-
研究ODATA,因为Web API(目前)支持它 . 我还没有做太多,所以我对它不是很熟悉 .
似乎正确的REST实践表明何时提取数据,您应该使用GET . 但是,GET也应该是无效的(不会产生副作用),我想知道我的具体实现是否违反了,因为我在API系统中标记了记录,因此我产生了副作用 .
它还引出了支持变量参数的问题 . 如果输入参数列表发生变化,那么如果发生很多事情,必须重新定义选择3的路线将是很繁琐的 . 如果在运行时定义参数会发生什么......
在任何情况下,对于我的具体实现,哪个选择(如果有的话)似乎最好?
10 回答
这个记录标记是什么意思?如果这仅用于记录目的,我将使用GET并禁用所有缓存,因为您要记录此资源的每个查询 . 如果记录标记有另一个目的,POST就是要走的路 . 用户应该知道,他的动作影响系统,POST方法是一个警告 .
我认为最简单的方法就是使用
AttributeRouting
.在您的控制器中显而易见,您为什么要在Global
WebApiConfig
文件中使用它?例:
{}
名称需要与您的参数匹配 .就这么简单,现在你有一个单独的
GET
来处理这个实例中的多个参数 .只需为
WebApiConfig
条目添加新路由即可 .例如,致电:
加:
然后将参数添加到HTTP调用:
我只需要实现一个RESTfull api,我需要传递参数 . 我通过传递查询字符串中的参数来完成此操作,其格式与Mark的第一个示例“api / controller?start = date1&end = date2”所描述的相同 .
在控制器中我使用了URL split in C#?的提示
在我的情况下,我通过Ajax调用WebApi看起来像:
我希望这有帮助...
我在http://habrahabr.ru/post/164945/找到了优秀的解决方案
@LukLed清楚地解释了使用GET或POST . 关于你可以传递参数的方法,我建议采用第二种方法(我对ODATA也不太了解) .
这不是用户友好和SEO友好
这是通常的优选方法 .
这绝对不是一个好方法 . 这让人觉得有一个
date2
是date1
的子资源,事实并非如此 .date1
和date2
都是查询参数,并且处于同一级别 .在简单的情况下,我会建议像这样的URI,
但我个人喜欢下面的URI模式,但在这种情况下,我们必须编写一些自定义代码来映射参数 .
使用参数绑定完全描述如下:http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
根链接(,)和Get函数参数(一,二)的两个参数应该相同
我知道这真的很老了,但我最近想要同样的东西,这就是我发现的......
所以现在在你的地址/ URI / ...
HTTP(S):// myURL / API / myController的/ VAR = GETNEW&测试=测试
结果:“发现测试”
HTTP(S):// myURL / API / myController的/ VAR = GETNEW&测试=任何
结果:“无法找到该测试”