欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

asp.net core 屬性路由和約定路由的實(shí)現(xiàn)

 更新時(shí)間:2025年01月06日 09:51:59   作者:Libby博仙  
ASP.NET Core中的WebAPI路由用于映射客戶端請(qǐng)求的URL到服務(wù)器端的控制器和操作方法,路由分為基于屬性的路由和約定路由兩種方式,本文就來介紹一下,感興趣的可以了解一下

在 ASP.NET Core 中,Web API 中的路由(Route)用于確定客戶端請(qǐng)求的 URL 與服務(wù)器端處理邏輯之間的映射關(guān)系。路由機(jī)制在 Web API 的開發(fā)中非常重要,它幫助定義和管理不同請(qǐng)求路徑如何觸發(fā)特定的控制器和操作方法。

1. 路由概述

路由在 Web API 中有兩種主要的映射方式:

  • 基于屬性的路由(Attribute Routing):通過在控制器和操作方法上使用路由特性(例如 [Route] 和 [HttpGet])來配置路由規(guī)則。
  • 約定路由(Convention-Based Routing):基于約定的方式通過配置在 Startup.cs 或 Program.cs 中的路由規(guī)則。

2. 基于屬性的路由(Attribute Routing)

ASP.NET Core Web API 使用屬性路由來定義 HTTP 請(qǐng)求與控制器方法之間的映射。通過在控制器和操作方法上添加路由特性,可以直接控制 API 請(qǐng)求如何被路由到特定的控制器和方法。

2.1 控制器級(jí)別的路由

通過在控制器上使用 [Route] 特性來定義路由前綴或基路徑。所有控制器中的操作方法都會(huì)基于這個(gè)前綴來創(chuàng)建 URL 路徑。

[Route("api/[controller]")] 
// 控制器的基礎(chǔ)路由 
public class ProductsController : ControllerBase
{
    // GET api/products
    [HttpGet]
    public IActionResult GetAllProducts()
    {
        return Ok(new { message = "獲取所有產(chǎn)品" });
    }

    // GET api/products/{id}
    [HttpGet("{id}")]
    public IActionResult GetProduct(int id) 
    {
        return Ok(new { message = $"獲取產(chǎn)品 {id}" });
    }
}
  • [Route("api/[controller]")] 會(huì)把控制器的路由前綴設(shè)置為 api/products(假設(shè)控制器名稱是 ProductsController)。
  • [HttpGet("{id}")] 為獲取特定產(chǎn)品的方法指定一個(gè)帶有參數(shù) id 的 URL 路徑。例如,GET api/products/1。

2.2 操作方法級(jí)別的路由

每個(gè)控制器方法可以通過單獨(dú)的路由特性來指定其對(duì)應(yīng)的 URL 路徑和 HTTP 方法。

[Route("api/[controller]")] 
public class ProductsController : ControllerBase 
{ 
    [HttpGet] 
    // GET api/products 
    public IActionResult GetAllProducts() 
    { 
        return Ok(new { message = "獲取所有產(chǎn)品" }); 
    } 

    [HttpGet("{id}")] 
    // GET api/products/{id} 
    public IActionResult GetProduct(int id) 
    { 
        return Ok(new { message = $"獲取產(chǎn)品 {id}" }); 
    } 

    [HttpPost] 
    // POST api/products 
    public IActionResult CreateProduct([FromBody] Product product) 
    { 
        return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product); 
    } 
}
  • [HttpGet("{id}")] 定義了一個(gè)帶有 id 參數(shù)的 GET 請(qǐng)求,GET api/products/1 將會(huì)觸發(fā)該方法。
  • [HttpPost] 用于處理 POST 請(qǐng)求,POST api/products 會(huì)調(diào)用 CreateProduct 方法。

2.3 路由參數(shù)

  • 常規(guī)參數(shù):通過 {parameterName} 來定義路由中的參數(shù)。
  • 可選參數(shù):使用 ? 表示路由中的參數(shù)是可選的。
  • 約束參數(shù):可以對(duì)參數(shù)進(jìn)行約束,例如只接受數(shù)字或字符串。
[Route("api/products/{id:int}")] 
// 參數(shù) id 必須是整數(shù) 
public IActionResult GetProduct(int id) 
{ 
    return Ok(new { message = $"獲取產(chǎn)品 {id}" }); 
} 

[Route("api/products/{category?}")] 
// category 是可選參數(shù) 
public IActionResult GetProductsByCategory(string category) 
{ 
    return Ok(new { message = $"獲取 {category} 類別的產(chǎn)品" }); 
}
  • int 約束表示 id 必須是整數(shù)。
  • category? 表示 category 是一個(gè)可選的查詢參數(shù)。

3. 約定路由(Convention-Based Routing)

ASP.NET Core 也支持通過約定來定義路由,這種方式通常在 Program.cs 或 Startup.cs 文件中的 MapControllerRoute 中配置。

3.1 默認(rèn)路由配置

在 Program.cs 或 Startup.cs 中,你可以使用約定路由配置來定義 URL 模式:

var builder = WebApplication.CreateBuilder(args); 
builder.Services.AddControllers(); 
var app = builder.Build(); 
// 約定路由配置 
app.MapControllerRoute( name: "default", pattern: "api/{controller}/{action}/{id?}"); 
app.Run();
  • 這種路由配置會(huì)生成類似 api/products/Get/1 這樣的 URL。
  • {controller} 會(huì)被替換為控制器名稱(不包括 Controller 后綴)。
  • {action} 會(huì)被替換為方法名稱。
  • {id?} 是可選的參數(shù)。

3.2 匹配控制器和動(dòng)作方法

約定路由的基本配置如下所示:

[ApiController] 
[Route("api/[controller]")] 
public class ProductsController : ControllerBase 
{ 
    [HttpGet("{id?}")] 
    // 默認(rèn)情況下可以訪問此路由 
    public IActionResult GetProduct(int? id) 
    { 
        if (id.HasValue) 
        { 
            return Ok($"獲取產(chǎn)品 ID {id.Value}"); 
        } 
        return Ok("獲取所有產(chǎn)品"); 
    } 

    [HttpPost] 
    // 對(duì)應(yīng) POST 請(qǐng)求 
    public IActionResult CreateProduct([FromBody] Product product) 
    { 
        return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product); 
    } 
}

在這種配置下,GET api/products/ 和 GET api/products/{id} 都能被映射到 GetProduct 方法。

4. 路由的優(yōu)先級(jí)

當(dāng)多個(gè)路由規(guī)則可以匹配同一個(gè)請(qǐng)求時(shí),ASP.NET Core 會(huì)按照以下順序匹配路由:

  • 基于屬性的路由:先匹配控制器和操作方法上的特性定義的路由。
  • 約定路由:然后會(huì)匹配通過約定在 Program.cs 或 Startup.cs 中配置的路由。

需要注意的是,如果存在多個(gè)路由規(guī)則都可以匹配同一個(gè)請(qǐng)求,ASP.NET Core 會(huì)選擇最具體的路由規(guī)則進(jìn)行匹配。確保路由規(guī)則的優(yōu)先級(jí)設(shè)置正確是非常重要的。

5. 路由的 HTTP 方法

ASP.NET Core 中的路由是通過 HTTP 方法(GET, POST, PUT, DELETE 等)來區(qū)分的。例如,可以通過在控制器方法上使用 [HttpGet][HttpPost][HttpPut] 等特性來指定該方法響應(yīng)的 HTTP 請(qǐng)求類型。

[Route("api/products")] 
public class ProductsController : ControllerBase 
{ 
    [HttpGet] 
    // GET api/products 
    public IActionResult GetAllProducts() 
    { 
        return Ok(new { message = "獲取所有產(chǎn)品" }); 
    } 

    [HttpPost] 
    // POST api/products 
    public IActionResult CreateProduct([FromBody] Product product) 
    { 
        return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product); 
    } 
}

6. 路由總結(jié)

  • 基于屬性的路由 提供了靈活的 URL 定義方式,適合復(fù)雜的 API 路徑。
  • 約定路由 提供了基于控制器和動(dòng)作方法的默認(rèn)路由模式,簡化了 URL 的配置。
  • 路由參數(shù) 可以通過路徑、查詢字符串或請(qǐng)求體傳遞,支持常規(guī)、可選、約束參數(shù)等形式。
  • HTTP 方法 的特性(如 [HttpGet][HttpPost])用于區(qū)分不同類型的請(qǐng)求。

通過合理地使用路由特性,開發(fā)者可以實(shí)現(xiàn)對(duì) API 路徑、方法、請(qǐng)求類型等的精確控制,提升 Web API 的可維護(hù)性和可擴(kuò)展性。

到此這篇關(guān)于asp.net core 屬性路由和約定路由的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)asp.net core 屬性路由和約定路由內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論