ASP.NET Core 2.2 Запрет прямого доступа URL-адресов к документу / файлу - PullRequest
1 голос
/ 28 мая 2019

У меня есть куча файлов, хранящихся в каталоге.Эти файлы имеют ссылки, хранящиеся в базе данных, например

https://localhost:44325/Repositories/Aopdio/2019/05/QWNjb3VX0FNT1NUSElSRF9LTA==.pdf

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

Есть ли способ предотвратить это?Я бы хотел, чтобы контент обслуживался только из приложения.

Это мой запуск .cs

app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(RepositoryManager.GetBasePath(Environment.GetEnvironmentVariable("APPONE_REPOSITORY"))),
    RequestPath = RepositoryManager.GetRequestPath(Environment.GetEnvironmentVariable("APPONE_REPOSITORY"))
});
app.UseStaticFiles(
    new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(
            Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Resources")),
        RequestPath = "/Resources"
    }
);

Это промежуточное ПО, которое я пытался реализовать:

In Startup.cs

app.UseRequestMiddleware();

Промежуточное программное обеспечение

public class RequestMiddleware
{
    private readonly RequestDelegate next;

    public RequestMiddleware(RequestDelegate next)
    {
        this.next = next;
    }

    public async Task Invoke(HttpContext context, Func<Task> next)
    {
        var test = context;
    }
}

Расширение, которое вызывает промежуточное программное обеспечение и вызывается в Startup.cs

public static class RequestMiddlewareExtension
    {
        public static IApplicationBuilder UseRequestMiddleware(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<RequestMiddleware>();
        }
    }
}

Однако,Я получаю эту ошибку:

InvalidOperationException: Unable to resolve service for type 'System.Func`1[System.Threading.Tasks.Task]' while attempting to Invoke middleware 'App.ClassLibrary.Middleware.RequestMiddleware'.

1 Ответ

1 голос
/ 28 мая 2019

В стандартной конфигурации app.UseStaticFiles (), обслуживаются только файлы под wwwroot.Если файлы вне этого каталога обслуживаются напрямую, либо вы включили статические файлы для всего приложения из корневой папки, либо включили просмотр каталогов в IIS.Вы можете проверить и отключить их.

[Обновить] Когда вы обрабатываете файлы с помощью UseStaticFiles (), метод request not не проходит через обычный конвейер промежуточного программного обеспечения.Таким образом, вы не можете использовать обычные функции промежуточного программного обеспечения, такие как Authenticate / Authorize.Либо у вас может быть контроллер репозитория, который возвращает FileResult, либо у вас может быть пользовательское промежуточное ПО, например , здесь .

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