ASP.NET Core 2.2 - доступ к StaticFileOption RequestPath позже в коде - PullRequest
0 голосов
/ 12 июня 2019

В Startup.cs Настройка функции я делаю примерно так:

        app.UseStaticFiles(new StaticFileOptions()
        {
            FileProvider = new PhysicalFileProvider(@"\\server\somepath\someimages"),
            RequestPath = "/images"
        });

Позже, скажем, в контроллере, я бы не хотел жестко кодировать:

        string ImageImLookingFor = "/images" + foo.jpg;

Вместо этого я хотел бы сделать что-то вроде:

        string ImageImLookingFor = SomeObjectThatGivesMe.RequestPath + foo.jpg;

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

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

ex: в ваших appsettings

{
 "ImagesPath" : '/images"
}

в Starup.cs

   app.UseStaticFiles(new StaticFileOptions()
    {
        FileProvider = new PhysicalFileProvider(@"\\server\somepath\someimages"),
        RequestPath = Configuration["ImagesPath"]
    });

В вашем контроллере

    string ImageImLookingFor = configuration.RequestPath + foo.jpg;

Вы можете сделать файл конфигурации строгим типом и заменить его на IOptions<ImageConfiguration>, где ImageConfiguration - это класс, имеющий свойство ImagesPath

1 голос
/ 12 июня 2019

Вы можете попытаться настроить StaticFileOptions с services.Configure как

public class Startup
{
    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<StaticFileOptions>(options => {
            options.FileProvider = new PhysicalFileProvider(@"xxx");
            options.RequestPath = "/images";
        });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {            
        app.UseStaticFiles(app.ApplicationServices.GetRequiredService<IOptions<StaticFileOptions>>().Value);            
    }
} 

А затем получить к нему доступ IOptions<StaticFileOptions>, как

public class HomeController : Controller
{
    private readonly StaticFileOptions _options;
    public HomeController(IOptions<StaticFileOptions> options)
    {
        this.configuration = configuration;
        _serviceProvider = serviceProvider;
        _options = options.Value;
    }
    public IActionResult Index()
    {
        return Ok(_options.RequestPath);
    }        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...