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