Chuyển hướng đơn giản với ASP.NET Core Endpoint

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ớirecord để 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, RedirectPermanentRedirect(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 RedirectRedirectPermanent

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!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *