我应该如何将多个参数传递给ASP.Net Web API GET?


Answers

我认为最简单的方法是简单地使用AttributeRouting

在你的控制器中显而易见,你为什么要在你的Global WebApiConfig文件中使用它?

例:

    [Route("api/YOURCONTROLLER/{paramOne}/{paramTwo}")]
    public string Get(int paramOne, int paramTwo)
    {
        return "The [Route] with multiple params worked";
    }

{}名称需要与您的参数相匹配。

简单的,现在你有一个单独的GET在这个实例中处理多个参数。

Question

我正在使用.Net MVC4 Web API来(希望)实现一个RESTful API。 我需要将几个参数传递给系统,并让它执行一些操作,然后返回一个对象列表作为结果。 具体来说,我传递了两个日期并返回落在它们之间的记录。 我还跟踪返回的记录,以便后续调用不会在系统中重新处理。

我考虑过几种方法:

  1. 将参数序列化为一个JSON字符串,并在API中将其分开。 http://forums.asp.net/t/1807316.aspx/1

  2. 在查询字符串中传递参数。
    将多个查询参数传递给restful api的最佳方式是什么?

  3. 在路径中定义参数:api / controller / date1 / date2

  4. 使用本质上允许我用params传递对象的POST。

  5. 自Web API(目前)支持它以来研究ODATA。 我还没有做过很多,所以我不太熟悉它。

看起来适当的REST实践指示何时拉取数据,您应该使用GET。 但是,GET也应该是无效的(不产生副作用),我不知道我的具体实现是否违反了这个规定,因为我在API系统中标记了记录,因此我产生了副作用。

这也导致了我支持可变参数的问题。 如果输入参数列表发生变化,如果发生了很多事情,则必须重新定义您的选择3的路线,这将非常繁琐。 如果参数是在运行时定义的,会发生什么情况...

无论如何,对于我的具体实施,哪个选择(如果有的话)似乎最好?




我只需要实现一个RESTfull API,我需要传递参数。 我通过传递查询字符串中的参数来完成此操作,其格式与Mark第一个示例“api / controller?start = date1&end = date2”所述的相同。

在控制器中,我使用了C#中的URL拆分技巧

// 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清楚地解释了使用GETPOST 。 关于你可以传递参数的方式,我会建议采用第二种方法(我对ODATA也不太了解)。

1.将参数串行化成一个JSON字符串,并在API中将其分开。 http://forums.asp.net/t/1807316.aspx/1

这不是用户友好SEO友好

2.在查询字符串中通过参数。 将多个查询参数传递给restful api的最佳方式是什么?

这是通常的优选方法。

3.定义路径中的参数:api / controller / date1 / date2

这绝对不是一个好方法。 这使得感觉有一个date2date1的子资源,情况并非如此。 date1date2都是查询参数,并且出现在同一级别。

在简单的情况下,我会建议一个这样的URI,

api/controller?start=date1&end=date2

但我个人喜欢下面的URI模式,但在这种情况下,我们必须编写一些自定义代码来映射参数。

api/controller/date1,date2



Links