在ASP.NET Web Api中实现对Restangulars .several()方法的支持

时间:2014-03-21 14:29:24

标签: c# asp.net rest asp.net-web-api restangular

我最近在Restangular中找到了方便的方法.several()。 这让我可以获取多个单个对象,非常好。

所以我尝试了以下生成此网址的Restangular.several('accounts', 'a', 'b', 'c');/api/accounts/a,b,c

与我的ASP.NET Web Api控制器不太匹配。 初稿:

public class MyController : ApiController
{
    public HttpResponseMessage GetAll() { ... }
    public HttpResponseMessage GetSingle(string id) { ... }
    public HttpResponseMessage GetMultiple(IEnumerable<string> ids) { ... }
}

从我的角度来看,这将是理想的控制器。然而它失败了,有一个例外,说MVC无法区分actinos :(

第二稿:

public class MyController : ApiController
{
    public HttpResponseMessage GetAll() { ... }
    public HttpResponseMessage GetSingle(string id) { ... }
}

现在这不会崩溃。但ida,b,c

我是否真的需要手动split字符串并从那里开始使用它? 这也不适用于int类型。 public HttpResponseMessage GetSingle(int id) { ... }

在ASP.NET Web Api中实现.several()支持的正确方法是什么?我认为这是一个标准的REST调用,因为它在Restangular中。

1 个答案:

答案 0 :(得分:1)

带有正则表达式约束的属性路由可以在这里工作......

[Route("api/my")]
public HttpResponseMessage GetAll() {
    // ...
}

[Route("api/my/{id:regex(^[^,]+$)}")]
public HttpResponseMessage GetSingle(string id)
{
    // ...
}

[Route("api/my/{ids:regex(,)}")]
public HttpResponseMessage GetMultiple(string ids)
{
    // strings
    var idList = ids.Split(',');

    //// ints
    // var idList = ids.Split(',').Select(i => Convert.ToInt32(i)).ToList();

    // ...
}