gpt4 book ai didi

c# - WebApi 添加另一个 Get 方法

转载 作者:行者123 更新时间:2023-11-30 13:19:42 26 4
gpt4 key购买 nike

我有一个非常标准的 WebApi,可以执行一些基本的 CRUD 操作。

我正在尝试添加一些不同类型的查找,但不太确定应该如何完成。

这是我当前的 FoldersController

public class FoldersController : ApiBaseController
{
//using ninject to pass the unit of work in
public FoldersController(IApiUnitOfWork uow)
{
Uow = uow;
}

// GET api/folders
[HttpGet]
public IEnumerable<Folder> Get()
{
return Uow.Folders.GetAll();
}

// GET api/folders/5
public Folder Get(int id)
{
return Uow.Folders.GetById(id);
}

// POST api/folders
public HttpResponseMessage Post(Folder folder)
{
Uow.Folders.Add(folder);
Uow.Commit();

var response = Request.CreateResponse(HttpStatusCode.Created, folder);

// Compose location header that tells how to get this Folder
response.Headers.Location = new Uri(Url.Link(WebApiConfig.DefaultRoute, new { id = folder.Id }));

return response;
}

// PUT api/folders
public HttpResponseMessage Put(Folder folder)
{
Uow.Folders.Update(folder);
Uow.Commit();
return new HttpResponseMessage(HttpStatusCode.NoContent);
}

// DELETE api/folders/5
public HttpResponseMessage Delete(int id)
{
Uow.Folders.Delete(id);
Uow.Commit();

return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}

我想做的是添加一个看起来像这样的方法

public IEnumerable<Folder> GetChildFolders(int folderID)
{
return Uow.Folders.GetChildren(folderID);
}

因为我已经有了标准的 Get 方法,所以我不太确定该怎么做。

我最初以为我可以添加一条新路线..类似

routes.MapHttpRoute(
name: "ActionAndIdRoute",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: null,
constraints: new { id = @"^/d+$" } //only numbers for id
);

然后只需在我的方法中添加类似 ActionName 注释的内容 [ActionName("GetChildren")]

但这并没有成功。

我走在正确的轨道上吗?如何在不添加另一个 Controller 的情况下执行此类操作?

最佳答案

您可能不喜欢这个答案,但我觉得它是正确的。 WebAPI 设计为每个实体类型只有 5 次调用,GET(一个项目/列表项目)、POST、PUT 和 DELETE。这允许 REST URL,例如 Folders/Get/5、Folders/Get 等。

现在,在您的场景中,您需要 ChildFolders,我可以理解它们不是不同的对象,但它们在 REST(ChildFolders/Get)等方面是不同的实体。我觉得这应该是另一个 WebAPI Controller 。

有一些方法可以修补 Http Routes 来管理这个,但我不认为 Web API 是如何设计的,它强制你遵循 REST data-by-entity-type 协议(protocol)......否则为什么不只是将 .NET MVC Controller 用于 AJAX 调用?

关于c# - WebApi 添加另一个 Get 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16591859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com