asp.net-mvc 我应该如何将多个参数传递给ASP.Net Web API GET?
我正在使用.Net MVC4 Web API来(希望)实现一个RESTful API。 我需要将几个参数传递给系统,并让它执行一些操作,然后返回一个对象列表作为结果。 具体来说,我传递了两个日期并返回落在它们之间的记录。 我还跟踪返回的记录,以便后续调用不会在系统中重新处理。
我考虑过几种方法:
将参数序列化为一个JSON字符串,并在API中将其分开。 http://forums.asp.net/t/1807316.aspx/1
在查询字符串中传递参数。
将多个查询参数传递给restful api的最佳方式是什么?在路径中定义参数:api / controller / date1 / date2
使用本质上允许我用params传递对象的POST。
自Web API(目前)支持它以来研究ODATA。 我还没有做过很多,所以我不太熟悉它。
看起来适当的REST实践指示何时拉取数据,您应该使用GET。 但是,GET也应该是无效的(不产生副作用),我不知道我的具体实现是否违反了这个规定,因为我在API系统中标记了记录,因此我产生了副作用。
这也导致了我支持可变参数的问题。 如果输入参数列表发生变化,如果发生了很多事情,则必须重新定义您的选择3的路线,这将非常繁琐。 如果参数是在运行时定义的,会发生什么情况...
无论如何,对于我的具体实施,哪个选择(如果有的话)似乎最好?
我只需要实现一个RESTfull API,我需要传递参数。 我通过传递查询字符串中的参数来完成此操作,其格式与Mark第一个示例“api / controller?start = date1&end = date2”所述的相同。
// uri: /api/courses
public IEnumerable<Course> Get()
{
NameValueCollection nvc = HttpUtility.ParseQueryString(Request.RequestUri.Query);
var system = nvc["System"];
// BL comes here
return _courses;
}
在我的情况下,我通过Ajax调用WebApi,如下所示:
$.ajax({
url: '/api/DbMetaData',
type: 'GET',
data: { system : 'My System',
searchString: '123' },
dataType: 'json',
success: function (data) {
$.each(data, function (index, v) {
alert(index + ': ' + v.name);
});
},
statusCode: {
404: function () {
alert('Failed');
}
}
});
我希望这有帮助...
@LukLed清楚地解释了使用GET或POST 。 关于你可以传递参数的方式,我会建议采用第二种方法(我对ODATA也不太了解)。
1.将参数串行化成一个JSON字符串,并在API中将其分开。 http://forums.asp.net/t/1807316.aspx/1
这不是用户友好和SEO友好
2.在查询字符串中通过参数。 将多个查询参数传递给restful api的最佳方式是什么?
这是通常的优选方法。
3.定义路径中的参数:api / controller / date1 / date2
这绝对不是一个好方法。 这使得感觉有一个date2
是date1
的子资源,情况并非如此。 date1
和date2
都是查询参数,并且出现在同一级别。
在简单的情况下,我会建议一个这样的URI,
api/controller?start=date1&end=date2
但我个人喜欢下面的URI模式,但在这种情况下,我们必须编写一些自定义代码来映射参数。
api/controller/date1,date2