ASP> NET Core 2.1: новый экземпляр класса внутри приложения. Карта - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть промежуточное ПО для получения HTTP-запросов, начинающихся с «proxycall», и только те.Я думал, что смогу вызвать промежуточное программное обеспечение внутри app.map в файле startup.config, но проблема в том, что я не знаю, как его создать.

Вот мой файл программы:

public static void Main(string[] args)
{            
    CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)                
        .UseStartup<Startup>()
        .ConfigureLogging(logging =>
        {
            logging.ClearProviders();
            logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
        })
    .UseNLog();

Вот мой файл запуска:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {            
        string connectionString =
            Configuration.GetConnectionString("DefaultConnection");
        services.AddDbContext<GotMapContext>(o => o.UseSqlServer(connectionString));
        services.AddSingleton<ConfigHelper>(c => new ConfigHelper(Configuration));
        services.Configure<GeoProxyConfig>(Configuration.GetSection("AppSettings"));
        services.AddHttpClient();
        services.AddAutoMapper(); 
        services.AddMvc()
            .AddJsonOptions(o => o.SerializerSettings.ContractResolver = 
                new DefaultContractResolver());                 
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

    app.UseDeveloperExceptionPage();
    app.UseStatusCodePages();
    app.UseStaticFiles();
    app.Map(new PathString("/proxycall"), 
        a => a.Run(async(context ) => 
        {
            // TODO : Create an new instance of GeoProxyMiddleware. 
            // The class requires the config, httpclient and logger instance.
        }));
    app.UseMvcWithDefaultRoute();
}

Вот мое промежуточное ПО, которое я пытаюсь вызвать из app.map:

public class GeoProxyMiddleware
{
    private readonly IOptions<GeoProxyConfig> _geoProxyConfig;
    private readonly IHttpClientFactory _httpClientFactory;
    private readonly ILogger<GeoProxyMiddleware> _logger;

    public GeoProxyMiddleware(
        IOptions<GeoProxyConfig> config, 
        IHttpClientFactory HttpClientFactory, 
        ILogger<GeoProxyMiddleware> logger)
    {
        _geoProxyConfig = config;
        _httpClientFactory = HttpClientFactory;
        _logger = logger;
    }
}

1 Ответ

0 голосов
/ 30 ноября 2018

Я нашел ответ на свой вопрос по этой ссылке: https://www.devtrends.co.uk/blog/conditional-middleware-based-on-request-in-asp.net-core

app.MapWhen(context => context.Request.Path.StartsWithSegments("/proxycall"), 
           appBuilder => {
                appBuilder.UseMiddleware<GeoProxyMiddleware>();
           });
...