Added CultureMiddleware and DisposeMiddleware

This commit is contained in:
pavelbannov 2019-08-12 15:52:55 +03:00
parent d524663958
commit 731ddefc82
4 changed files with 92 additions and 33 deletions

View File

@ -0,0 +1,52 @@
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;
using ASC.Core;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
namespace ASC.Api.Core.Middleware
{
public class CultureMiddleware
{
private readonly RequestDelegate next;
public CultureMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context)
{
CultureInfo culture = null;
if (SecurityContext.IsAuthenticated)
{
var user = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID);
if (!string.IsNullOrEmpty(user.CultureName))
{
culture = user.GetCulture();
}
}
if (culture == null)
{
culture = CoreContext.TenantManager.GetCurrentTenant().GetCulture();
}
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
await next.Invoke(context);
}
}
public static class CultureMiddlewareExtensions
{
public static IApplicationBuilder UseCultureMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<CultureMiddleware>();
}
}
}

View File

@ -0,0 +1,35 @@
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;
using ASC.Common.Web;
using ASC.Core;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
namespace ASC.Api.Core.Middleware
{
public class DisposeMiddleware
{
private readonly RequestDelegate next;
public DisposeMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context)
{
context.Response.RegisterForDispose(new DisposableHttpContext(context));
await next.Invoke(context);
}
}
public static class DisposeMiddlewareExtensions
{
public static IApplicationBuilder UseDisposeMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<DisposeMiddleware>();
}
}
}

View File

@ -1,3 +1,4 @@
using System.Globalization;
using System.Threading;
using ASC.Api.Core;
@ -113,24 +114,9 @@ namespace ASC.People
app.UseAuthentication();
app.Use(async (context, next) => {
if (SecurityContext.IsAuthenticated)
{
var user = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID);
var culture = user.GetCulture();
Thread.CurrentThread.CurrentCulture = user.GetCulture();
Thread.CurrentThread.CurrentCulture = user.GetCulture();
}
//
await next.Invoke();
});
app.UseCultureMiddleware();
app.Use(async (context, next) =>
{
context.Response.RegisterForDispose(new DisposableHttpContext(context));
await next();
});
app.UseDisposeMiddleware();
app.UseEndpoints(endpoints =>
{

View File

@ -109,23 +109,9 @@ namespace ASC.Web.Api
app.UseAuthentication();
app.Use(async (context, next) => {
if (SecurityContext.IsAuthenticated)
{
var user = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID);
var culture = user.GetCulture();
Thread.CurrentThread.CurrentCulture = user.GetCulture();
Thread.CurrentThread.CurrentCulture = user.GetCulture();
}
await next.Invoke();
});
app.UseCultureMiddleware();
app.Use(async (context, next) =>
{
context.Response.RegisterForDispose(new DisposableHttpContext(context));
await next();
});
app.UseDisposeMiddleware();
app.UseEndpoints(endpoints =>
{