Chuyển hướng đơn giản với ASP.NET Core Endpoint
Khi các ứng dụng web phát triển và chúng ta hiểu rõ hơn các vấn đề mà chúng ta đang giải quyết, việc sắp xếp lại các tuyến đường trở thành vấn đề khó chịu không thể tránh khỏi.
Trong bài viết ngắn nhưng hữu ích này, chúng ta sẽ thêm một số phương thức mở rộng vào interface IEndpointRouteBuilder
để giúp việc lập bản đồ chuyển hướng trở nên dễ dàng.
Sử dụng Redirect và RedirectPermanent
Trước khi chúng ta thấy việc triển khai các phương thức mở rộng cho Redirect
của mình, hãy xem cách chúng ta sẽ sử dụng chúng trong mã đăng ký điểm cuối (endpoint) của chúng ta. Chúng ta sẽ sử dụng các tính năng của C# 9 như kiểu dữ liệu mục tiêu mới và record để giữ nhiễu mã ở mức tối thiểu.
app.UseEndpoints(endpoints =>
{
// redirect to one route
endpoints.Redirect("/", "/hello");
// redirect permanently to a route
endpoints.RedirectPermanent("/bye", "hello");
// or multiple redirects
endpoints.Redirect(
new ("/hi", "/hello"),
new ("/hola", "/hello"),
new ("/wassup", "/hello", true)
);
endpoints.MapGet("/hello", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
Với một vài lệnh cấu hình đơn giản sử dụng Redirect
, RedirectPermanent
và Redirect(params Redirective[])
, chúng ta có được một API chuyển hướng mạnh mẽ. Thật tuyệt phải không ?! Tất nhiên là thế rồi. Hãy xem cách chúng ta có thể triển khai nó trong các ứng dụng web ASP.NET Core của chúng ta.
Triển khai các phương thức mở rộng cho Redirect và RedirectPermanent
Việc triển khai các phương thức mở rộng của chúng ta yêu cầu sử dụng phương thức MapGet
trên đối tượng IApplicationBuilder
và sau đó chúng ta cần gọi phương thức Redirect
từ HttpContext
. Nhìn chung, các phương thức mở rộng này hoạt động tương tự nhau.
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Routing;
public static class EndpointExtensions
{
public static IEndpointRouteBuilder Redirect(
this IEndpointRouteBuilder endpoints,
string from, string to)
{
return Redirect(endpoints,
new Redirective(from, to));
}
public static IEndpointRouteBuilder RedirectPermanent(
this IEndpointRouteBuilder endpoints,
string from, string to)
{
return Redirect(endpoints,
new Redirective(from, to, true));
}
public static IEndpointRouteBuilder Redirect(
this IEndpointRouteBuilder endpoints,
params Redirective[] paths
)
{
foreach (var (from, to, permanent) in paths)
{
endpoints.MapGet(from, async http => { http.Response.Redirect(to, permanent); });
}
return endpoints;
}
}
public record Redirective(string From, string To, bool Permanent = false);
Vậy là bạn đã có nó! Một tập hợp các phương thức mở rộng đơn giản chắc chắn sẽ làm cho công việc khó khăn của việc ánh xạ lại và chuyển hướng các tuyến đường dễ dàng hơn cho bạn và nhóm phát triển web của bạn.
Như thường lệ, cảm ơn bạn đã dành thời gian đọc bài viết này!