我的问题是关于在以下情况下的.NET核心web中命名路由的“正确方法”:

所以我有这样的资源:
/api/enterprise/1 // get enterprise 1
/api/contract/1 // get contract 1
/api/bank-account/1 //get bankaccount 1我的问题是,获得企业银行账户的最佳方式是什么?
第一个想法:
使用查询字符串作为“搜索-术语”
api/bank-account?EnterpriseId=1第二思想
使用子资源
api/enterprise/1/bank-account但如果我这样做,我有多个不同级别的“银行账户”,我不知道这是否是一个好办法?
api/enterprise/1/bank-account //bank-account level2
api/bank-account //bank-account level1我认为第二个想法是一个好方法,但我不确定是否可以在不同的api级别上操作相同的“模型”。
谢谢。祝你今天愉快
发布于 2020-10-30 10:17:06
看看微软的路由Web示例:ASP.NET网络应用中的路由选择
我更喜欢第二个idea.With,稍微抛光一下
例如:
api/enterprise //return List of enterprise objects if needed
api/enterprise/1 //return specific enterprise with id 1
api/enterprise/1/bank-account //return list of bank accounts for enterprise with id 1
api/enterprise/1/bank-account/1 //return specific bank account with id 1也就是说,如果您想在特定企业的上下文中获得银行帐户的话。
但是,如果你只想通过它的id获得银行账户,最好这样做。
api/bank-account/1在本用例中,如果不添加带有企业id的查询字符串,则无法真正获得特定企业的银行帐户,因为
api/bank-account //this should return list of bank accounts ALL BANK ACCOUNTS下面是一个多级控制器示例:
[Route("Inventories/{inventoryId}/[controller]")]
[ApiController]
public class InventoryEntriesController : ControllerBase
{
...
// GET: Inventories/{inventoryId}/InventoryEntries
[Authorize]
[HttpGet]
public async Task<ActionResult<IEnumerable<InventoryEntryDto>>> GetInventoryEntries(int inventoryId)
{
...
}
// GET: Inventories/{inventoryId}/InventoryEntries/{id}
[Authorize]
[HttpGet("{id}")]
public async Task<ActionResult<InventoryEntryDto>> GetInventoryEntry(int id)
{
...
}
// POST: Inventories/{inventoryId}/InventoryEntries
[Authorize]
[HttpPost]
public async Task<ActionResult<InventoryEntryDto>> AddInventoryEntry(InventoryEntryDto inventoryEntryDto)
{
...
}
// PUT: Inventories/{inventoryId}/InventoryEntries/{id}
[Authorize]
[HttpPut("{id}")]
public async Task<IActionResult> UpdateInventoryEntry(int id, InventoryEntryDto inventoryEntryDto)
{
...
}
// DELETE: Inventories/{inventoryId}/InventoryEntries/{id}
[Authorize]
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteInventoryEntry(int id)
{
...
}
}https://stackoverflow.com/questions/64605944
复制相似问题