Routing là gì?
Routing là quá trình ánh xạ (mapping) truy vấn HTTP với một đối tượng xử lý truy vấn đó (handler).
Để sử dụng routing trong azure function apps, bạn cần thêm một thuộc tính Route vào thuộc tính HttpTrigger của chức năng của bạn. Thuộc tính Route sử dụng cú pháp đặt tên đường dẫn của ASP.NET Web API. Bạn có thể sử dụng các ký tự đặc biệt như { và } để xác định các tham số trong đường dẫn và sử dụng các ràng buộc để kiểm soát kiểu dữ liệu của routing
Default Routing trong Azure Function
Mặc định, khi bạn tạo mới HttpTrigger Function, bạn sẽ có đoạn code tương đương như sau:
using System.IO;
using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Attributes;
using Microsoft.Extensions.Logging;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json;
namespace Nhatkyhoctap.Functions
{
public class Get
{
private readonly ILogger<Get> _logger;
public Get(ILogger<Get> log)
{
_logger = log;
}
[FunctionName("Get")]
[OpenApiOperation(operationId: "Run", tags: new[] { "name" })]
[OpenApiParameter(name: "name", In = ParameterLocation.Query, Required = true, Type = typeof(string), Description = "The **Name** parameter")]
[OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, contentType: "text/plain", bodyType: typeof(string), Description = "The OK response")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
}
}
Trong Terminal, bạn gõ func start để chạy chương trình
func start
Ở màn hình console, các URL của hàm Get sẽ hiển thị như sau:
Azure Functions Core Tools
Core Tools Version: 4.0.5148 Commit hash: N/A (64-bit)
Get: [GET,POST] http://localhost:7071/api/Get
RenderOAuth2Redirect: [GET] http://localhost:7071/api/oauth2-redirect.html
RenderOpenApiDocument: [GET] http://localhost:7071/api/openapi/{version}.{extension}
RenderSwaggerDocument: [GET] http://localhost:7071/api/swagger.{extension}
RenderSwaggerUI: [GET] http://localhost:7071/api/swagger/ui
For detailed output, run func with --verbose flag.
[2023-06-04T09:44:30.470Z] Host lock lease acquired by instance ID '00000000000000000000000057419E4E'.
Bạn vào đường dẫn http://localhost:7071/api/swagger/ui để kiểm tra lại URL
Kết quảhttp://localhost:7071/api/Get?name=
Custom routing
Mặc định, giá trị Routing = null. Để cập nhật giá trị URL, bạn cập nhật giá trị Routing.
Ví dụ đổi tên Get thành Hello
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "Hello")] HttpRequest req)
Kết quả
http://localhost:7071/api/Hello?name=
Ở URL trên, giá trị Name được truyền thông qua query string ?name=. Thay vì vậy, chúng ta sẽ truyền thông qua URL
Ví dụ: http://localhost:7071/api/Hello/1
[FunctionName("Get")]
[OpenApiOperation(operationId: "Run", tags: new[] { "name" })]
[OpenApiParameter(name: "name", In = ParameterLocation.Query, Required = true, Type = typeof(string), Description = "The **Name** parameter")]
[OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, contentType: "text/plain", bodyType: typeof(string), Description = "The OK response")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "Hello/{id}")] HttpRequest req, string id)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
string responseMessage = $"Hello, {id}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
Trên trình duyệt, bạn gõ: http://localhost:7071/api/Hello/AnBinhTrong
Kết quả
Hello, AnBinhTrong. This HTTP triggered function executed successfully.
Mặc định, type của paramter là string. Bạn có thể chỉ định type thông qua câu lệnh: {valueName:int} hoặc nếu giá trị là optional: {valueName:int?}
[FunctionName("Get")]
[OpenApiOperation(operationId: "Run", tags: new[] { "name" })]
[OpenApiParameter(name: "name", In = ParameterLocation.Query, Required = true, Type = typeof(string), Description = "The **Name** parameter")]
[OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, contentType: "text/plain", bodyType: typeof(string), Description = "The OK response")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "Hello/{id:int?}")] HttpRequest req, int id)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
string responseMessage = $"Hello, {id}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
Ví dụ: http://localhost:7071/api/Hello/1
Kết quả:Hello, 1. This HTTP triggered function executed successfully.
Nhận xét
Đăng nhận xét