簡體   English   中英

帶有 Route 標簽的 ASP.net 嵌套路由

[英]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來創建更復雜的規則,但是如果您想保持簡單並為每個單獨的端點指定路由,那么您可以繼續使用HttpGetRoute屬性。 或者,如果您想使其明確,您可以在每個HttpGet寫出整個路由並忽略控制器上的Route屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM