Как класс Middleware получает параметры в Asp. NET Core - PullRequest
0 голосов
/ 11 июля 2020

это мой первый вопрос, поэтому не судите строго Я пытаюсь понять, как Middleware получает параметры из Configure метода в классе Startup . Вот код класса Middleware :

public class LocationMiddleware
{
    private RequestDelegate next;
    private MessageOptions options;

    public LocationMiddleware(RequestDelegate nextDelegate,IOptions<MessageOptions> opts)
    {
        next = nextDelegate;
        options = opts.Value;
    }

    public async Task Invoke(HttpContext context)
    {
        if (context.Request.Path=="/location")
        {
            await context.Response.WriteAsync($"{options.CityName}, {options.CountryName}");
        }
        else
        {
            await next(context);
        }
    }
}

Конструктор этого класса принимает 2 параметра RequestDelegate и IOptions<MessageOptions> Но при вызове метода UseMiddleware в Startup классе в этой строке не отправляются никакие параметры app.UseMiddleware<LocationMiddleware>();

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseMiddleware<LocationMiddleware>();

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGet("/", async context =>
            {
                await context.Response.WriteAsync("Hello World!");
            });
        });
    }

Итак, мой вопрос в том, как класс промежуточного программного обеспечения получает эти параметры?

1 Ответ

0 голосов
/ 13 июля 2020

Конструктор этого класса принимает 2 параметра RequestDelegate и IOptions<MessageOptions> Но при вызове метода UseMiddleware в классе Startup параметры в этой строке не отправляются app.UseMiddleware<LocationMiddleware>();

Я предполагаю, что вы добавили / зарегистрировали MessageOptions в контейнер службы, который будет разрешен в вашем настраиваемом промежуточном программном обеспечении.

services.Configure<MessageOptions>(Configuration.GetSection("MessageOptions"));

Кроме того, вы можете проверить исходный код UseMiddleware, чтобы узнать, как это работает.

...