假设我正在对blogging REST API建模,它有blog
、post
和comment
资源。然后为blog
和post
资源添加以下URI:
/api/blogs
/api/blogs/{blogId}
/api/blogs/{blogId}/posts
由于应该避免深度嵌套,我为所有post
创建了单独的endpoint,以便获取它们的注释`S:
/api/posts
/api/posts/{postId}
/api/posts/{postId}/comments
现在,由于post
资源可以从两个不同的URI访问,如下所示:
我应该如何在ASP.NET Core API项目中实现这一点,而不会出现不必要的代码重复?
例如,我应该在同一个控制器的同一个动作中实现这两个endpoint,还是应该在两个控制器中分离这两个endpoint(例如,在PostsController
中处理/API/posts?blogid=123
和在BlogsController
中处理/API/blogs/123/posts
)?此外,我是应该在两个endpoint上实现post
、put
和delete
操作,还是只选择一个作为主URI?
在我了解了如何这样做之后,是否可以将相同的方法推广到具有相同类型关系的其他资源(例如post
和comment
)?
您应该为每个资源创建单独的控制器。这两个控制器可能共享的是PostService或其他获取post的机制。此外,请记住,如果您使用的是实体框架或其他ORM,文章可能会通过关系在Blog对象上公开。因此,您的操作可能非常简单:
public async Task<IActionResult> GetPostsForBlog(int blogId)
{
return Ok(_context.Blogs.Find(blogId).Posts);
}
知道如何正确设置控制器描述吗? 谢谢,马里奥
现在,我从Visual Studio 2015提供的默认ASP.NET核心Web应用程序项目模板开始,包括对单个用户帐户的身份验证。 大多数(如果不是所有)生成的控制器都返回视图,通常遵循以下模式: 此方法返回一个您可以看到的视图,当web客户机请求时,一切都很好。但是如果游戏正在向相同的方法发送请求呢?在这种情况下,需要一个JSON响应(不是view/html文档),我的问题是在ASP.NET核
.NET核心和ASP.NET核心到底有什么区别?