Служите статической папке с аутентификацией в asp net core 2.0 - PullRequest
0 голосов
/ 11 июня 2019

Я использую asp net core 2.0.5 с MVC и хочу использовать статическую папку за пределами wwwroot.

Мои входные файлы будут выглядеть следующим образом.

wwwroot
staticfolder
    10
        index.html
        image1.png
        image2.png
        sub-folder
            image3.jpg

index.html генерируется другой программой.Все изображения используются в index.html.

Мы хотим подключиться к серверу после проверки аутентификации, т.е. пользователи могут просматривать index.html по пути api/flight/10/index.html.Но мне нужно проверить разрешение пользователя на доступ к ресурсу flight 10.

Я понимаю, что Physicalfile можно использовать для обслуживания статического файла (например, * .png) вне wwwroot, а также для настройки app.UseStaticFiles для обслуживания папок и файлов в файле startup.cs.

Некоторые псевдокоды для минимального примера.

[Route("api/flight/{flight}/index.html")]
[HttpGet]
public IActionResult GetImageThumbnail(
    [FromRoute] int flight)
{
    // Check permission
    List<Flight> data = _context
        .Flight(id: flight)
        .ToList();

    if (data.Count() == 0)
    {
        return NotFound("No permission.");
    }

    // data[0].BaseFolder is a folder outside wwwroot
    string filename = data[0].BaseFolder + "/index.html";
    // Return the content for index.html
    ...
}

Поэтому мой вопрос заключается в том, как настроить сервер для папки, смешанной с html и изображениями, используя описанный выше метод.

1 Ответ

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

Я нашел простое решение для достижения своей цели.Публикуйте здесь, если у других есть такая же проблема.

Ключевым моментом является установка маршрута с использованием {*file}, который будет соответствовать любой строке в конце.

[Route("api/flight/{flight}/{*file}")]
[HttpGet]
public async Task<IActionResult> GetImageThumbnail([FromRoute]int flight, 
    [FromRoute] string file)
{

    // Check permission
    List<Flight> data = _context
    .Flight(id: flight)
    .ToList();

    if (data.Count() == 0)
    {
    return NotFound("No permission.");
    }
    string filename = Path.Combine(data[0].BaseFolder, file);
    var provider = new Microsoft.AspNetCore.StaticFiles.FileExtensionContentTypeProvider();

    string minetype = "";
    provider.TryGetContentType(filename, out minetype);
    return PhysicalFile(filename, minetype);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...