Make CookieTempDataProvider the default ITempDataProvider (#5892)
This commit is contained in:
parent
4a20c849cb
commit
d9d280d1ef
|
|
@ -66,6 +66,28 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers <see cref="SessionStateTempDataProvider"/> as the default <see cref="ITempDataProvider"/>
|
||||||
|
/// in the <see cref="IServiceCollection"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
|
||||||
|
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
|
||||||
|
public static IMvcBuilder AddSessionStateTempDataProvider(this IMvcBuilder builder)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(builder));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the TempData basics are registered.
|
||||||
|
MvcViewFeaturesMvcCoreBuilderExtensions.AddViewServices(builder.Services);
|
||||||
|
|
||||||
|
var descriptor = ServiceDescriptor.Singleton(typeof(ITempDataProvider), typeof(SessionStateTempDataProvider));
|
||||||
|
builder.Services.Replace(descriptor);
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers <see cref="CookieTempDataProvider"/> as the default <see cref="ITempDataProvider"/> in the
|
/// Registers <see cref="CookieTempDataProvider"/> as the default <see cref="ITempDataProvider"/> in the
|
||||||
/// <see cref="IServiceCollection"/>.
|
/// <see cref="IServiceCollection"/>.
|
||||||
|
|
|
||||||
|
|
@ -198,7 +198,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
// Temp Data
|
// Temp Data
|
||||||
//
|
//
|
||||||
// This does caching so it should stay singleton
|
// This does caching so it should stay singleton
|
||||||
services.TryAddSingleton<ITempDataProvider, SessionStateTempDataProvider>();
|
services.TryAddSingleton<ITempDataProvider, CookieTempDataProvider>();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Antiforgery
|
// Antiforgery
|
||||||
|
|
|
||||||
|
|
@ -7,22 +7,23 @@ using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Internal;
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||||
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.FunctionalTests
|
namespace Microsoft.AspNetCore.Mvc.FunctionalTests
|
||||||
{
|
{
|
||||||
public class TempDataInCookiesTest : TempDataTestBase, IClassFixture<MvcTestFixture<BasicWebSite.StartupWithCookieTempDataProvider>>
|
public class TempDataInCookiesTest : TempDataTestBase, IClassFixture<MvcTestFixture<BasicWebSite.Startup>>
|
||||||
{
|
{
|
||||||
public TempDataInCookiesTest(MvcTestFixture<BasicWebSite.StartupWithCookieTempDataProvider> fixture)
|
public TempDataInCookiesTest(MvcTestFixture<BasicWebSite.Startup> fixture)
|
||||||
{
|
{
|
||||||
Client = fixture.Client;
|
Client = fixture.Client;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override HttpClient Client { get; }
|
protected override HttpClient Client { get; }
|
||||||
|
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(ChunkingCookieManager.DefaultChunkSize)]
|
[InlineData(ChunkingCookieManager.DefaultChunkSize)]
|
||||||
[InlineData(ChunkingCookieManager.DefaultChunkSize * 1.5)]
|
[InlineData(ChunkingCookieManager.DefaultChunkSize * 1.5)]
|
||||||
|
|
@ -39,8 +40,7 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
|
||||||
|
|
||||||
// Assert 1
|
// Assert 1
|
||||||
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||||
IEnumerable<string> setCookieValues;
|
Assert.True(response.Headers.TryGetValues(HeaderNames.SetCookie, out IEnumerable<string> setCookieValues));
|
||||||
Assert.True(response.Headers.TryGetValues(HeaderNames.SetCookie, out setCookieValues));
|
|
||||||
setCookieValues = setCookieValues.Where(cookie => cookie.Contains(CookieTempDataProvider.CookieName));
|
setCookieValues = setCookieValues.Where(cookie => cookie.Contains(CookieTempDataProvider.CookieName));
|
||||||
Assert.NotEmpty(setCookieValues);
|
Assert.NotEmpty(setCookieValues);
|
||||||
// Verify that all the cookies from CookieTempDataProvider are within the maximum size
|
// Verify that all the cookies from CookieTempDataProvider are within the maximum size
|
||||||
|
|
@ -99,8 +99,7 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
|
||||||
|
|
||||||
// Assert 1
|
// Assert 1
|
||||||
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||||
IEnumerable<string> setCookieValues;
|
Assert.True(response.Headers.TryGetValues(HeaderNames.SetCookie, out IEnumerable<string> setCookieValues));
|
||||||
Assert.True(response.Headers.TryGetValues(HeaderNames.SetCookie, out setCookieValues));
|
|
||||||
var setCookieHeader = setCookieValues
|
var setCookieHeader = setCookieValues
|
||||||
.Select(setCookieValue => SetCookieHeaderValue.Parse(setCookieValue))
|
.Select(setCookieValue => SetCookieHeaderValue.Parse(setCookieValue))
|
||||||
.FirstOrDefault(setCookieHeaderValue => setCookieHeaderValue.Name == CookieTempDataProvider.CookieName);
|
.FirstOrDefault(setCookieHeaderValue => setCookieHeaderValue.Name == CookieTempDataProvider.CookieName);
|
||||||
|
|
@ -153,8 +152,7 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||||
IEnumerable<string> setCookieValues;
|
Assert.True(response.Headers.TryGetValues(HeaderNames.SetCookie, out IEnumerable<string> setCookieValues));
|
||||||
Assert.True(response.Headers.TryGetValues(HeaderNames.SetCookie, out setCookieValues));
|
|
||||||
var setCookieHeader = setCookieValues
|
var setCookieHeader = setCookieValues
|
||||||
.Select(setCookieValue => SetCookieHeaderValue.Parse(setCookieValue))
|
.Select(setCookieValue => SetCookieHeaderValue.Parse(setCookieValue))
|
||||||
.FirstOrDefault(setCookieHeaderValue => setCookieHeaderValue.Name == CookieTempDataProvider.CookieName);
|
.FirstOrDefault(setCookieHeaderValue => setCookieHeaderValue.Name == CookieTempDataProvider.CookieName);
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@ using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.FunctionalTests
|
namespace Microsoft.AspNetCore.Mvc.FunctionalTests
|
||||||
{
|
{
|
||||||
public class TempDataInSessionTest : TempDataTestBase, IClassFixture<MvcTestFixture<BasicWebSite.Startup>>
|
public class TempDataInSessionTest : TempDataTestBase, IClassFixture<MvcTestFixture<BasicWebSite.StartupWithSessionTempDataProvider>>
|
||||||
{
|
{
|
||||||
public TempDataInSessionTest(MvcTestFixture<BasicWebSite.Startup> fixture)
|
public TempDataInSessionTest(MvcTestFixture<BasicWebSite.StartupWithSessionTempDataProvider> fixture)
|
||||||
{
|
{
|
||||||
Client = fixture.Client;
|
Client = fixture.Client;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -289,7 +289,7 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
Assert.Equal(typeof(SessionStateTempDataProvider), descriptor.ImplementationType);
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
Assert.Equal(typeof(SessionStateTempDataProvider), descriptor.ImplementationType);
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,6 @@ namespace BasicWebSite
|
||||||
services.AddSingleton<IActionDescriptorProvider, ActionDescriptorCreationCounter>();
|
services.AddSingleton<IActionDescriptorProvider, ActionDescriptorCreationCounter>();
|
||||||
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
|
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
|
||||||
services.AddScoped<RequestIdService>();
|
services.AddScoped<RequestIdService>();
|
||||||
services.AddMemoryCache();
|
|
||||||
services.AddDistributedMemoryCache();
|
|
||||||
services.AddSession();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Configure(IApplicationBuilder app)
|
public void Configure(IApplicationBuilder app)
|
||||||
|
|
@ -38,8 +35,6 @@ namespace BasicWebSite
|
||||||
// Initializes the RequestId service for each request
|
// Initializes the RequestId service for each request
|
||||||
app.UseMiddleware<RequestIdMiddleware>();
|
app.UseMiddleware<RequestIdMiddleware>();
|
||||||
|
|
||||||
app.UseSession();
|
|
||||||
|
|
||||||
// Add MVC to the request pipeline
|
// Add MVC to the request pipeline
|
||||||
app.UseMvc(routes =>
|
app.UseMvc(routes =>
|
||||||
{
|
{
|
||||||
|
|
@ -55,4 +50,3 @@ namespace BasicWebSite
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,18 +6,21 @@ using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace BasicWebSite
|
namespace BasicWebSite
|
||||||
{
|
{
|
||||||
public class StartupWithCookieTempDataProvider
|
public class StartupWithSessionTempDataProvider
|
||||||
{
|
{
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
|
// CookieTempDataProvider is the default ITempDataProvider, so we must override it with session.
|
||||||
services
|
services
|
||||||
.AddMvc()
|
.AddMvc()
|
||||||
.AddCookieTempDataProvider();
|
.AddSessionStateTempDataProvider();
|
||||||
|
services.AddSession();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Configure(IApplicationBuilder app)
|
public void Configure(IApplicationBuilder app)
|
||||||
{
|
{
|
||||||
app.UseCultureReplacer();
|
app.UseCultureReplacer();
|
||||||
|
app.UseSession();
|
||||||
app.UseMvcWithDefaultRoute();
|
app.UseMvcWithDefaultRoute();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue