Browse Source

Avoid setting cookies multiple times.

pull/9562/head
maliming 5 years ago
parent
commit
c87a34b6f9
  1. 1
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs
  2. 2
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLanguagesController.cs
  3. 24
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationMiddleware.cs

1
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs

@ -64,6 +64,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
context, context,
requestCulture requestCulture
); );
context.Items[AbpRequestLocalizationMiddleware.HttpContextItemName] = true;
} }
await next(context); await next(context);

2
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLanguagesController.cs

@ -33,6 +33,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Localization
new RequestCulture(culture, uiCulture) new RequestCulture(culture, uiCulture)
); );
HttpContext.Items[AbpRequestLocalizationMiddleware.HttpContextItemName] = true;
var context = new QueryStringCultureReplacementContext(HttpContext, new RequestCulture(culture, uiCulture), returnUrl); var context = new QueryStringCultureReplacementContext(HttpContext, new RequestCulture(culture, uiCulture), returnUrl);
await QueryStringCultureReplacement.ReplaceAsync(context); await QueryStringCultureReplacement.ReplaceAsync(context);

24
framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationMiddleware.cs

@ -10,6 +10,8 @@ namespace Microsoft.AspNetCore.RequestLocalization
{ {
public class AbpRequestLocalizationMiddleware : IMiddleware, ITransientDependency public class AbpRequestLocalizationMiddleware : IMiddleware, ITransientDependency
{ {
public const string HttpContextItemName = "__AbpSetCultureCookie";
private readonly IAbpRequestLocalizationOptionsProvider _requestLocalizationOptionsProvider; private readonly IAbpRequestLocalizationOptionsProvider _requestLocalizationOptionsProvider;
private readonly ILoggerFactory _loggerFactory; private readonly ILoggerFactory _loggerFactory;
@ -29,14 +31,22 @@ namespace Microsoft.AspNetCore.RequestLocalization
_loggerFactory _loggerFactory
); );
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); context.Response.OnStarting(() =>
if (requestCultureFeature?.Provider is QueryStringRequestCultureProvider)
{ {
AbpRequestCultureCookieHelper.SetCultureCookie( if (context.Items[HttpContextItemName] == null)
context, {
requestCultureFeature.RequestCulture var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
); if (requestCultureFeature?.Provider is QueryStringRequestCultureProvider)
} {
AbpRequestCultureCookieHelper.SetCultureCookie(
context,
requestCultureFeature.RequestCulture
);
}
}
return Task.CompletedTask;
});
await middleware.Invoke(context); await middleware.Invoke(context);
} }

Loading…
Cancel
Save