我在工作中遇到了一个问题,我无法找到有关在RESTful Web服务中针对主键是其他资源ID的组合的资源执行CRUD操作的通常标准或实践的信息.我们使用MVC WebApi来创建控制器.例如,我们有三个表:
Product:PK = ProductIdPart:PK = PartIdProductPartAssoc:PK =(ProductId,PartId)产品可以包含许多部件,而部件可以是许多产品的组件.关联表还包含与关联本身相关的其他信息,而不是可编辑的信息.
我们有ProductsController和PartsController类使用定义为的路由模板处理通常的GET/PUT/POST/DELETE操作:{controller}/{id}/{action}以便以下IRI工作:
/api/Products- 返回所有产品,创建新产品/api/Products/1- 检索/更新/删除产品1/api/Parts- 返回所有部件,创建一个新部件/api/Parts/2- 检索/更新/删除第2部分/api/Products/1/Parts- 获取产品1的所有部件/api/Parts/2/Products- 获取第2部分为组件的所有产品我遇到问题的方法是如何为ProductPartAssoc资源定义路径模板.获取关联数据的路由模板和IRI应该是什么样的?坚持惯例,我希望如下:
/api/ProductPartAssoc- 返回所有关联,创建关联/api/ProductPartAssoc/[1,2]- 检索/更新/删除产品1和第2部分之间的关联我的同事发现这在美学上令人不悦,并且似乎认为最好不要有一个ProductPartAssocController类,而是添加其他方法ProductsController来管理关联数据:
/api/Products/1/Parts/2- 获取产品1和第2部分之间关联的数据,而不是第2部分作为第1部分成员的数据,这通常是基于其他示例的情况,例如/Book/5/Chapter/3我在其他地方看到的情况.在一天结束时,我想我要求的是验证,或者我可以指出的方向,并说"看,这是其他人做的."
处理复合键识别的资源的典型做法是什么?
rest composite-key asp.net-web-api attributerouting asp.net-web-api-routing
我刚刚为WebAPI下载了AttributeRouting NuGet包,并且在我的控制器中出现问题.我认为使用它的方法是:
public class InboxController : ApiController
{
private IInboxService _inboxService;
public InboxController(IInboxService inboxService)
{
_inboxService = inboxService;
}
public IEnumerable<MessageModel> GetAll()
{
return _inboxService.GetAllMessages();
}
[HttpGet("Inbox/Count")]
public int GetInboxCount()
{
return _inboxService.GetMessageCount();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:错误2'System.Web.Http.HttpGetAttribute'不包含带有1个参数的构造函数
我需要快速启动并运行它.有什么理由为什么HttpGet属性没有重载的构造函数?
UPDATE
[GET("Inbox/EnquiryCount")]
public EnquiryCountModel GetEnquiryCounts()
{
var model = new EnquiryCountModel();
model.EnquiryCount = _inboxService.GetCustomerEnquiriesCount();
model.EnquiryResponseCount = _inboxService.GetCustomerEnquiryResponseCount();
return model;
}
Run Code Online (Sandbox Code Playgroud)
在路线:
routes.MapHttpRoute("InboxEnquiryApi", "api/inbox/{action}", new { Controller = "Inbox" }, null, new WebApiAuthenticationHandler(GlobalConfiguration.Configuration));
Run Code Online (Sandbox Code Playgroud)
当我点击"api/inbox/EnquiryCount"中的网址时出现此错误:
**No HTTP resource was found that matches the request URI …Run Code Online (Sandbox Code Playgroud)