gpt4 book ai didi

asp.net-web-api - 多个 GET 操作

转载 作者:行者123 更新时间:2023-12-01 07:45:43 25 4
gpt4 key购买 nike

我正在创建以下 Controller :

public FoosController : ApiController
{
public IQueryable Get()
{
return AnODataQueryableListOfFoos();
}

public void Delete(Guid id)
{
DeleteTheFooWithId(id);
}

public IQueryable<Bar> GetBars(Guid id)
{
var foo = GetFooById(id);
return AnODataQueryableListOfBarsForThisFoo(foo);
}

public IEnumerable ProjectedBars(Guid id)
{
var foo = GetFooById(id);
return foo.Qux
? OneProjectionOfBars(foo)
: AnotherProjectionOfBars(foo);
}
}

(Bars 的列表可以被认为是 Foo 的“内容”...)

我打算使用以下 URL:

GET /api/Foos                         -> Get
GET /api/Foos/SOME_GUID/Bars -> GetBars
GET /api/Foos/SOME_GUID/ProjectedBars -> GetProjectedBars
DELETE /api/Foos/SOME_GUID -> Delete

我尝试了 [ActionName] 和自定义路由的几种组合,但总是存在冲突或 404。

实现此功能的最简单方法是什么?如果可能的话,我想保持我的路线通用(即没有特定于 Controller 的东西)。其他 Controller 使用更标准的 /Stuff - Stuff/id 方法。

我也欢迎有人指出我完全滥用 URL。欢迎改进。

最佳答案

我同意属性路由是最好的方法,但是您可以尝试以下方法:

public FoosController : ApiController
{
[HttpGet]
public IQueryable Get()
{
return AnODataQueryableListOfFoos();
}

[HttpGet]
[ActionName("Bars")]
public IQueryable<Bar> GetBars(Guid id)
{
var foo = GetFooById(id);
return AnODataQueryableListOfBarsForThisFoo(foo);
}

[HttpGet]
[ActionName("ProjectedBars")]
public IEnumerable GetProjectedBars(Guid id)
{
var foo = GetFooById(id);
return foo.Qux
? OneProjectionOfBars(foo)
: AnotherProjectionOfBars(foo);
}
}

然后使用以下路由:

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: "api/{controller}/{id}/{action}"
);

关于asp.net-web-api - 多个 GET 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735060/

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