[英]ASP.net nesting routes with Route tags
我是 C# 和 ASP.Net 的新手
我正在嘗試對一些端點進行建模:
/api/sites/
/api/sites/{id}/
/api/sites/{id}/readers/
/api/sites/{id}/readers/{id}/
我已經有一個SitesController
[Route("api/[controller]")]
[ApiController]
public class SitesController : ControllerBase {
[HttpGet("{id:length(24)}")]
public ActionResult<Site> Get(string id) {}
}
我試過在SitesController
類中添加一個ReadersController
[Route("{id:length(24)}/[controller]}")]
[ApiController]
public class ReadersController {
[HttpGet]
public string Get() => "test";
}
我無法到達端點/api/sites/{id}/readers/
雖然所以我不確定我這樣做是否正確。 在仍然使用[Route]
標簽的同時,有什么方法可以做到這一點嗎?
如果您正在使用 asp.net core 構建 api,請檢查這個。
您可以盡可能多地使用routes.MapRoute
函數。 像這樣。
routes.MapRoute(
name: "default_route",
template: "{controller}/{action}/{id?}");
routes.MapRoute(
name: "default_route",
template: "{controller}/{action}/{id}/readers/{id?}");
您不應該嵌套控制器類。 為ReadersController
一個新類,然后像這樣設置路由:
[Route("api/[controller]")]
[ApiController]
public class SitesController : ControllerBase {
[HttpGet("{siteId:length(24)}")]
public ActionResult<Site> Get(string siteId) {}
}
[Route("api/sites/{siteId:length(24)}/[controller]")]
[ApiController]
public class ReadersController {
[HttpGet]
public string Get() => "test";
[HttpGet("{readerId:length(24)}")]
public ActionResult<Site> Get(string siteId, string readerId) {}
}
您可以使用routes.MapRoute
來創建更復雜的規則,但是如果您想保持簡單並為每個單獨的端點指定路由,那么您可以繼續使用HttpGet
或Route
屬性。 或者,如果您想使其明確,您可以在每個HttpGet
寫出整個路由並忽略控制器上的Route
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.