我是WebAPI的新手并且正在努力做正确的事情。默认情况下,如果我要访问用户之类的东西,如果我想要用户5,我会调用api / user / 5.这样我的用户控制器就会得到Get(int num)。但我知道我经常需要传递其他参数。目前我有Get(JObject数据),但该数据参数用于其他参数。我将需要其他可选参数,无论我是发送ID还是想要列出所有内容。如何使用WebAPI正确组织方法?我误解了什么吗?
澄清: 这个问题更多的是关于REST而不是动态对象,尽管它们起了作用:
当我需要额外的参数时,如何获得单个资源与资源列表。我认为这些概念是两种不同的方法,但是当涉及到路由时,额外的参数在我的脑海中使它复杂化。
答案 0 :(得分:1)
使用JToken或更动态的“动态”(Taken from here)
” JSON和JavaScript实际上是动态的,并且通常尝试将真正动态的JSON对象“反序列化”为强类型的.NET结构是一件麻烦事。 JSON.NET和ASP.NET Web API的模型绑定提供了一个快乐的媒介 - 一个中间立场 - 称为JToken。
public class ContactController : ApiController
{
public JToken Post(JToken contact)
{
return contact;
}
}
使用JToken提供动态容器,但也提供类似DOM的导航模型。但是,如果这对我来说不够动态,为什么我的方法的参数不能只是采取“动态”。
C#是静态类型的,当然,但这并不意味着我无法静态输入动态的东西。 ;)
再次注意观察窗口。
使用dynamic捕获JSON post payload
public class ContactController : ApiController
{
public dynamic Post(dynamic contact)
{
return contact;
}
}
“
答案 1 :(得分:1)
例如 -
[Route("customers/{customerId}/orders")]
public IEnumerable<Order> GetOrdersByCustomer(int customerId) { ... }
或
[Route("customers/{customerId}/orders/{orderId}")]
public Order GetOrderByCustomer(int customerId, int orderId) { ... }
如果需要返回列表,请创建一个返回列表的方法,否则返回请求的特定项
答案 2 :(得分:0)
我认为你应该为每个将处理请求的WebAPI函数创建一个新对象。您可以使用可为空的属性使参数可选。
[HttpPost]
public void SampleFunction(SampleFunctionModel model)
{
}
其中SampleFunctionModel为:
public class SampleFunctionModel
{
public int? Id { get; set; }
public string Name { get; set; }
}