我正在尝试构建一个系统,用于在aspnetcore webapi控制器方法的json响应中提供链接信息。理想情况下,我想从命名路由中查找正确的URI,而不是对URI进行硬编码。路径可能位于当前控制器或同一项目中的另一个控制器中 - 但我的所有路由都已命名,我只使用属性路由。
这是一个(人为的)示例控制器,展示了我想要实现的目标:
[Route("api/foos")]
public class FooController : Controller
{
[HttpGet("",Name="GetAllFoos")]
public async Task<ListWithLinks<FooInfo>> GetAllFoos()
{
var foos = await fooRepo.GetAll();
return foos;
}
[HttpGet("{id:int}",Name="GetFooById")]
public async Task<Foo> GetFoo(int id)
{
var foo = await fooRepo.Get(id);
foo.AddLink("self","GetFooById",foo.Id); // get uri eg "api/foos/123"
foo.AddLink("all","GetAllFoos"); // get uri "api/foos"
foo.AddLink("bar","GetBarById",foo.BarId); // get uri from another controller eg "api/bars/987"
return foo;
}
}
正如您在上面的第二种方法中所看到的,我想在GetFoo(int id)
的响应中添加3个链接。我有填写路径中的参数所需的信息,但我不知道如何找到并处理该路由信息以生成URI路径(注意,我已经从HttpContext获得了baseUri)。
有人能指出我正确的方向吗?