Endpoint Routing در ASP.NET Core 2.2.0

Endpoint Routing در ASP.NET Core 2.2.0

Endpoint Routing در ASP.NET Core 2.2.0

Endpoint Routing in 2.2

Endpoint Routing  چیست؟

 

مسیریابی به طور سنتی سازنده ای است که در اکوسیستم ASP.NET محدود شده است. تا زمانی که کد شما در داخل این ساختار اجرا شود، می توانید اطلاعات مسیر را بخوانید. با این حال، با گسترش تداخل middleware که پیش از و بعد از ASP.NET اجرا می شود، نیاز به یک سیستم مسیریابی در برنامه افزایش یافته است.

endpoint-routing-aspnet2

Endpoint Routing در ASP.NET Core 2.2.0

Endpoint Routing in 2.2

Endpoint Routing  چیست؟

 

مسیریابی به طور سنتی سازنده ای است که در اکوسیستم ASP.NET محدود شده است. تا زمانی که کد شما در داخل این ساختار اجرا شود، می توانید اطلاعات مسیر را بخوانید. با این حال، با گسترش تداخل middleware که پیش از و بعد از ASP.NET اجرا می شود، نیاز به یک سیستم مسیریابی در برنامه افزایش یافته است.

شما می توانید با استفاده از متد UseMvc در میان افزار Mvc مسیر و Routeهایتان را تعریف کنید. سپس زمانی که از این میان افزار درخواست شد، براساس تمام اطلاعاتی که دارد، Route مناسب را انتخاب کرده و متوجه می شود که کدام Controller و Action باید فراخوانی شود.

همچنین برای فراخوانی Route موجود (مسیری که از قبل وجود داشته است) می توانید از MapRoute استفاده کنید.

ASP.NET Core 2.2

 



using Microsoft.AspNetCore.Internal; 
public class Startup { 
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app .UseEndpointRouting() // Registering this prior to your middleware unlocks the ✨. //.YourMiddleware() .UseMvc(); } } 

 

ASP.NET Core 3.0 (preview-2)

 




using Microsoft.AspNetCore.Builder;

public class Startup
{
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app
            .UseRouting() // Registering this prior to your middleware unlocks the ✨.
            //.YourMiddleware()
            .UseMvc();
    }
}

 

مثال:

Model



public class Post
{
    public string Slug { get; set; }
    public string Title { get; set; }
}

/// 
/// We need a derivative class to support scenarios where we can't find a `Post`-record based on {slug}.
/// DI will throw an exception if we try to give it `null`.
/// 
public class GenericPost : Post
{ }

Razor view


@page "{slug}"
@model PostModel

@Model.Title

...

Razor view code


public class PostModel : BaseModel
{
    public PostModel(Post post)
    {
        this.post = post;
    }

    public Post post { get; private set; }

    public void OnGet()
    { }
}

Middleware



public class PostMiddleware
{
    public PostMiddleware(
        RequestDelegate next,
        IDatabase database)
    )
    {
        this.next = next;
        this.database = database;
    }

    private readonly IDatabase datbase;
    private readonly RequestDelegate next;

    public async Task InvokeAsync(HttpContext context)
    {
        var route = context.GetRouteData();

        if (route.Values.TryGetValue("slug", out var routeSlug))
        {
            var slug = routeSlug.ToString();
            var post = (await database.Fetch()).FirstOrDefault(x => x.Slug == slug);

            if (post != null)
            {
                context.Items.Add(nameof(Post), post);
            }
        }

        await next(context);
    }
}

Startup


public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped(serviceProvider =>
    {
        var accessor = serviceProvider.GetRequiredService();

        if (accessor.HttpContext.Items.TryGetValue(nameof(Post), out var post))
        {
            return post as Post;
        }
        else
        {
            return new GenericPost(); // we need to return something that is either a `Post` or derivative of `Post`.
        }
    });
}

 

"منتشر شده در سایت ABLY.IR"

 

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس