我最近在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) { ... }
}
现在这不会崩溃。但id
为a,b,c
。
我是否真的需要手动split
字符串并从那里开始使用它?
这也不适用于int
类型。 public HttpResponseMessage GetSingle(int id) { ... }
在ASP.NET Web Api中实现.several()
支持的正确方法是什么?我认为这是一个标准的REST调用,因为它在Restangular中。
答案 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();
// ...
}