Как проверить файлы в папке на сервере перед обработкой запроса файла с помощью промежуточного программного обеспечения asp.net core 2.1 - PullRequest
0 голосов
/ 22 апреля 2019

Мы пытаемся запустить файл ClickOnce (.application), который помещается на сервер через якорную ссылку в asp.net core 2.1. Функциональность работает нормально, но я хочу проверить доступ пользователя к этому файлу, прежде чем он будет открыт дляон также хочет записывать логи доступа пользователей в базу данных.Я добиваюсь этого, используя метод Middleware Invoke, используя приведенный ниже код, но он дважды вызывает метод Invoke и вставляет повторяющиеся записи для каждого запроса.

Может ли кто-нибудь помочь, как решить проблему дублирования базы данных?

public async Task Invoke(HttpContext context, IConfiguration iconfiguration, IHostingEnvironment env, IHttpContextAccessor httpContextAccessor)
    {

        userName = httpContextAccessor.HttpContext.User.Identity.Name;
        if (!string.IsNullOrWhiteSpace(userName))
        {
            userName = userName.ToLower();
        }
        OracleDbAppstoreContext dbContext = new OracleDbAppstoreContext(iconfiguration, env);
        try
        {
            bool isAuthenticated = false;
            string pack_id = "";
            environment = Convert.ToString(iconfiguration["Environment"]);
            string reqPath = context.Request.Path.Value;
            if (reqPath.Count() > 0 && reqPath.StartsWith("/"))
            {
                reqPath = reqPath.Substring(1, reqPath.Length - 1);
                if (reqPath.Split("/").Count() > 2)
                {
                    pack_id = reqPath.Split("/")[1];
                }

            }

            isAuthenticated = SiteAccessHelper.IsAdmin(Convert.ToString(iconfiguration["ADGroup"]).ToUpper(), Convert.ToString(iconfiguration["Domain_Name"]).ToUpper(), userName, iconfiguration, httpContextAccessor);

            if (isAuthenticated == false)
            {

                isAuthenticated = dbContext.APS_BOTS_PACKAGES.UserAccessForPackage(pack_id, userName, httpContextAccessor);

            }


            if (isAuthenticated == true)
            {

                context.Response.StatusCode = StatusCodes.Status200OK;


                // context.Response.Redirect(Path.Combine(env.ContentRootPath, reqPath));
                //await _next(context);
                context.Response.ContentType = "application/octet-stream";
                await context.Response.SendFileAsync(Path.Combine(env.ContentRootPath, reqPath));

            }
            else
            {

                await context.Response.WriteAsync("You are not the authorized person to access this link");

            }

        }
        catch (Exception ex)
        {
            dbContext.APS_Excpetion_Logging.SendErrorToText(ex, "MyHandlerMiddleware/Invoke");
            await context.Response.WriteAsync("There is an unhandled exception, please reachout to CT RPA Team");
        }

    }

}
...