Мы пытаемся запустить файл 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");
}
}
}