c# - 我应该如何在 ASP.NET Core 中为具有多个 URI 端点的资源实现 REST API Controller ?

标签 c# .net rest http asp.net-core

假设我正在为具有资源的博客 REST API 建模 Blog , PostComment . 然后我为 Blog 添加以下 URI和 Post资源:

/api/blogs
/api/blogs/{blogId}
/api/blogs/{blogId}/posts

并且由于应避免深度嵌套,我为所有 Post 创建了单独的端点s 为了获得他们的评论:

/api/posts
/api/posts/{postId}
/api/posts/{postId}/comments

现在,自 Post可以像这样从两个不同的 URI 访问资源:

  • /api/posts?blogId=123
  • /api/blogs/123/posts

我应该如何在没有不必要的代码重复的情况下在 ASP.NET Core API 项目中实现它?

例如。我应该在同一个 Controller 的相同操作中实现这两个端点,还是应该在两个 Controller 中将其分开(例如,处理 /api/posts?blogId=123 中的 PostsController/api/blogs/123/posts 中的 BlogsController )? 另外,我应该实现 POST 吗? , PUTDELETE在两个端点上执行操作还是只选择一个作为主要 URI?

在我了解如何执行此操作后,是否可以将相同的方法推广到具有相同类型关系的其他资源(例如 PostComment)?

最佳答案

您应该为每个资源制作单独的 Controller 。这两个 Controller 可能共享的是潜在的 PostService 或其他获取帖子的机制。还要记住,如果您使用 Entity Framework 或其他一些 ORM,帖子可能会通过关系暴露在博客对象上。因此,您的操作可能很简单:

public async Task<IActionResult> GetPostsForBlog(int blogId)
{
    return Ok(_context.Blogs.Find(blogId).Posts);
}

关于c# - 我应该如何在 ASP.NET Core 中为具有多个 URI 端点的资源实现 REST API Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66872871/

相关文章:

c# - .NET DLL 中的 System.DllNotFoundException

node.js - 类型错误 : Cannot read property 'findOne' of undefined

java - Jersey & Jackson - 修改 Jackson 输出的资源

javascript - Extjs 4.2 缓冲存储同步数据不起作用

C# 创建一个固定大小的哈希表

c# - 如何在 asp.net 中的 Handler 中设置 session 值

C# 属性 : One Attribute to Rule Them All?

.net - 从 Db ValidationException 获取准确的错误类型

c# - 在 Viewmodel 中接收 RaisePropertyChanged (MVVM Light)

c# - 如何在 linq to sql 中使用 TimeZoneInfo.ConvertTimeFromUtc?