Merge pull request #6582 from aspnet/rel/2.0.0
Add global filters with the right scope
This commit is contained in:
commit
8ab361ae42
|
|
@ -18,12 +18,16 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
/// Creates a <see cref="CompiledPageActionDescriptor"/> from the specified <paramref name="applicationModel"/>.
|
/// Creates a <see cref="CompiledPageActionDescriptor"/> from the specified <paramref name="applicationModel"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="applicationModel">The <see cref="PageApplicationModel"/>.</param>
|
/// <param name="applicationModel">The <see cref="PageApplicationModel"/>.</param>
|
||||||
|
/// <param name="globalFilters">Global filters to apply to the page.</param>
|
||||||
/// <returns>The <see cref="CompiledPageActionDescriptor"/>.</returns>
|
/// <returns>The <see cref="CompiledPageActionDescriptor"/>.</returns>
|
||||||
public static CompiledPageActionDescriptor Build(PageApplicationModel applicationModel)
|
public static CompiledPageActionDescriptor Build(
|
||||||
|
PageApplicationModel applicationModel,
|
||||||
|
FilterCollection globalFilters)
|
||||||
{
|
{
|
||||||
var boundProperties = CreateBoundProperties(applicationModel);
|
var boundProperties = CreateBoundProperties(applicationModel);
|
||||||
var filters = applicationModel.Filters
|
var filters = Enumerable.Concat(
|
||||||
.Select(f => new FilterDescriptor(f, FilterScope.Action))
|
globalFilters.Select(f => new FilterDescriptor(f, FilterScope.Global)),
|
||||||
|
applicationModel.Filters.Select(f => new FilterDescriptor(f, FilterScope.Action)))
|
||||||
.ToArray();
|
.ToArray();
|
||||||
var handlerMethods = CreateHandlerMethods(applicationModel);
|
var handlerMethods = CreateHandlerMethods(applicationModel);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,16 +16,6 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public class DefaultPageApplicationModelProvider : IPageApplicationModelProvider
|
public class DefaultPageApplicationModelProvider : IPageApplicationModelProvider
|
||||||
{
|
{
|
||||||
private const string ModelPropertyName = "Model";
|
private const string ModelPropertyName = "Model";
|
||||||
private readonly FilterCollection _globalFilters;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of <see cref="DefaultPageApplicationModelProvider"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="mvcOptions"></param>
|
|
||||||
public DefaultPageApplicationModelProvider(IOptions<MvcOptions> mvcOptions)
|
|
||||||
{
|
|
||||||
_globalFilters = mvcOptions.Value.Filters;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public int Order => -1000;
|
public int Order => -1000;
|
||||||
|
|
@ -146,11 +136,6 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
|
|
||||||
internal void PopulateFilters(PageApplicationModel pageModel)
|
internal void PopulateFilters(PageApplicationModel pageModel)
|
||||||
{
|
{
|
||||||
for (var i = 0; i < _globalFilters.Count; i++)
|
|
||||||
{
|
|
||||||
pageModel.Filters.Add(_globalFilters[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < pageModel.HandlerTypeAttributes.Count; i++)
|
for (var i = 0; i < pageModel.HandlerTypeAttributes.Count; i++)
|
||||||
{
|
{
|
||||||
if (pageModel.HandlerTypeAttributes[i] is IFilterMetadata filter)
|
if (pageModel.HandlerTypeAttributes[i] is IFilterMetadata filter)
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Filters;
|
||||||
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
|
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
|
||||||
using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
|
using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
|
@ -17,11 +18,13 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
private readonly IPageApplicationModelProvider[] _applicationModelProviders;
|
private readonly IPageApplicationModelProvider[] _applicationModelProviders;
|
||||||
private readonly IViewCompilerProvider _viewCompilerProvider;
|
private readonly IViewCompilerProvider _viewCompilerProvider;
|
||||||
private readonly IPageApplicationModelConvention[] _conventions;
|
private readonly IPageApplicationModelConvention[] _conventions;
|
||||||
|
private readonly FilterCollection _globalFilters;
|
||||||
|
|
||||||
public DefaultPageLoader(
|
public DefaultPageLoader(
|
||||||
IEnumerable<IPageApplicationModelProvider> applicationModelProviders,
|
IEnumerable<IPageApplicationModelProvider> applicationModelProviders,
|
||||||
IViewCompilerProvider viewCompilerProvider,
|
IViewCompilerProvider viewCompilerProvider,
|
||||||
IOptions<RazorPagesOptions> pageOptions)
|
IOptions<RazorPagesOptions> pageOptions,
|
||||||
|
IOptions<MvcOptions> mvcOptions)
|
||||||
{
|
{
|
||||||
_applicationModelProviders = applicationModelProviders
|
_applicationModelProviders = applicationModelProviders
|
||||||
.OrderBy(p => p.Order)
|
.OrderBy(p => p.Order)
|
||||||
|
|
@ -30,6 +33,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
_conventions = pageOptions.Value.Conventions
|
_conventions = pageOptions.Value.Conventions
|
||||||
.OfType<IPageApplicationModelConvention>()
|
.OfType<IPageApplicationModelConvention>()
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
_globalFilters = mvcOptions.Value.Filters;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IViewCompiler Compiler => _viewCompilerProvider.GetCompiler();
|
private IViewCompiler Compiler => _viewCompilerProvider.GetCompiler();
|
||||||
|
|
@ -61,7 +65,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
_conventions[i].Apply(context.PageApplicationModel);
|
_conventions[i].Apply(context.PageApplicationModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
return CompiledPageActionDescriptorBuilder.Build(context.PageApplicationModel);
|
return CompiledPageActionDescriptorBuilder.Build(context.PageApplicationModel, _globalFilters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -151,7 +151,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
|
|
||||||
private static PageApplicationModelProviderContext GetApplicationProviderContext(TypeInfo typeInfo)
|
private static PageApplicationModelProviderContext GetApplicationProviderContext(TypeInfo typeInfo)
|
||||||
{
|
{
|
||||||
var defaultProvider = new DefaultPageApplicationModelProvider(new TestOptionsManager<MvcOptions>());
|
var defaultProvider = new DefaultPageApplicationModelProvider();
|
||||||
var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeInfo);
|
var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeInfo);
|
||||||
defaultProvider.OnProvidersExecuting(context);
|
defaultProvider.OnProvidersExecuting(context);
|
||||||
return context;
|
return context;
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,10 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
};
|
};
|
||||||
var handlerTypeInfo = typeof(object).GetTypeInfo();
|
var handlerTypeInfo = typeof(object).GetTypeInfo();
|
||||||
var pageApplicationModel = new PageApplicationModel(actionDescriptor, handlerTypeInfo, new object[0]);
|
var pageApplicationModel = new PageApplicationModel(actionDescriptor, handlerTypeInfo, new object[0]);
|
||||||
|
var globalFilters = new FilterCollection();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var actual = CompiledPageActionDescriptorBuilder.Build(pageApplicationModel);
|
var actual = CompiledPageActionDescriptorBuilder.Build(pageApplicationModel, globalFilters);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Same(actionDescriptor.ActionConstraints, actual.ActionConstraints);
|
Assert.Same(actionDescriptor.ActionConstraints, actual.ActionConstraints);
|
||||||
|
|
@ -78,9 +79,10 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
var globalFilters = new FilterCollection();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var actual = CompiledPageActionDescriptorBuilder.Build(pageApplicationModel);
|
var actual = CompiledPageActionDescriptorBuilder.Build(pageApplicationModel, globalFilters);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Same(pageApplicationModel.PageType, actual.PageTypeInfo);
|
Assert.Same(pageApplicationModel.PageType, actual.PageTypeInfo);
|
||||||
|
|
@ -92,6 +94,52 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
Assert.Equal(pageApplicationModel.HandlerProperties.Select(p => p.PropertyName), actual.BoundProperties.Select(p => p.Name));
|
Assert.Equal(pageApplicationModel.HandlerProperties.Select(p => p.PropertyName), actual.BoundProperties.Select(p => p.Name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CreateDescriptor_AddsGlobalFiltersWithTheRightScope()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var actionDescriptor = new PageActionDescriptor
|
||||||
|
{
|
||||||
|
ActionConstraints = new List<IActionConstraintMetadata>(),
|
||||||
|
AttributeRouteInfo = new AttributeRouteInfo(),
|
||||||
|
FilterDescriptors = new List<FilterDescriptor>(),
|
||||||
|
RelativePath = "/Foo",
|
||||||
|
RouteValues = new Dictionary<string, string>(),
|
||||||
|
ViewEnginePath = "/Pages/Foo",
|
||||||
|
};
|
||||||
|
var handlerTypeInfo = typeof(TestModel).GetTypeInfo();
|
||||||
|
var pageApplicationModel = new PageApplicationModel(actionDescriptor, handlerTypeInfo, new object[0])
|
||||||
|
{
|
||||||
|
PageType = typeof(TestPage).GetTypeInfo(),
|
||||||
|
ModelType = typeof(TestModel).GetTypeInfo(),
|
||||||
|
Filters =
|
||||||
|
{
|
||||||
|
Mock.Of<IFilterMetadata>(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
var globalFilters = new FilterCollection
|
||||||
|
{
|
||||||
|
Mock.Of<IFilterMetadata>(),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var compiledPageActionDescriptor = CompiledPageActionDescriptorBuilder.Build(pageApplicationModel, globalFilters);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Collection(
|
||||||
|
compiledPageActionDescriptor.FilterDescriptors,
|
||||||
|
filterDescriptor =>
|
||||||
|
{
|
||||||
|
Assert.Same(globalFilters[0], filterDescriptor.Filter);
|
||||||
|
Assert.Equal(FilterScope.Global, filterDescriptor.Scope);
|
||||||
|
},
|
||||||
|
filterDescriptor =>
|
||||||
|
{
|
||||||
|
Assert.Same(pageApplicationModel.Filters[0], filterDescriptor.Filter);
|
||||||
|
Assert.Equal(FilterScope.Action, filterDescriptor.Scope);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private class TestPage
|
private class TestPage
|
||||||
{
|
{
|
||||||
public TestModel Model { get; } = new TestModel();
|
public TestModel Model { get; } = new TestModel();
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_ThrowsIfPageDoesNotDeriveFromValidBaseType()
|
public void OnProvidersExecuting_ThrowsIfPageDoesNotDeriveFromValidBaseType()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(InvalidPageWithWrongBaseClass).GetTypeInfo();
|
var typeInfo = typeof(InvalidPageWithWrongBaseClass).GetTypeInfo();
|
||||||
var descriptor = new PageActionDescriptor();
|
var descriptor = new PageActionDescriptor();
|
||||||
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
||||||
|
|
@ -62,7 +62,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_ThrowsIfModelPropertyDoesNotExistOnPage()
|
public void OnProvidersExecuting_ThrowsIfModelPropertyDoesNotExistOnPage()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithoutModelProperty).GetTypeInfo();
|
var typeInfo = typeof(PageWithoutModelProperty).GetTypeInfo();
|
||||||
var descriptor = new PageActionDescriptor();
|
var descriptor = new PageActionDescriptor();
|
||||||
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
||||||
|
|
@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_ThrowsIfModelPropertyIsNotPublic()
|
public void OnProvidersExecuting_ThrowsIfModelPropertyIsNotPublic()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithNonVisibleModel).GetTypeInfo();
|
var typeInfo = typeof(PageWithNonVisibleModel).GetTypeInfo();
|
||||||
var descriptor = new PageActionDescriptor();
|
var descriptor = new PageActionDescriptor();
|
||||||
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
||||||
|
|
@ -110,7 +110,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_ThrowsIfModelPropertyIsStatic()
|
public void OnProvidersExecuting_ThrowsIfModelPropertyIsStatic()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithStaticModel).GetTypeInfo();
|
var typeInfo = typeof(PageWithStaticModel).GetTypeInfo();
|
||||||
var descriptor = new PageActionDescriptor();
|
var descriptor = new PageActionDescriptor();
|
||||||
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
||||||
|
|
@ -135,7 +135,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_DiscoversPropertiesFromPage_IfModelTypeDoesNotHaveAttribute()
|
public void OnProvidersExecuting_DiscoversPropertiesFromPage_IfModelTypeDoesNotHaveAttribute()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithModelWithoutPageModelAttribute).GetTypeInfo();
|
var typeInfo = typeof(PageWithModelWithoutPageModelAttribute).GetTypeInfo();
|
||||||
var descriptor = new PageActionDescriptor();
|
var descriptor = new PageActionDescriptor();
|
||||||
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
||||||
|
|
@ -189,7 +189,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_DiscoversPropertiesFromPageModel_IfModelHasAttribute()
|
public void OnProvidersExecuting_DiscoversPropertiesFromPageModel_IfModelHasAttribute()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithModelWithPageModelAttribute).GetTypeInfo();
|
var typeInfo = typeof(PageWithModelWithPageModelAttribute).GetTypeInfo();
|
||||||
var modelType = typeof(ModelWithPageModelAttribute);
|
var modelType = typeof(ModelWithPageModelAttribute);
|
||||||
var descriptor = new PageActionDescriptor();
|
var descriptor = new PageActionDescriptor();
|
||||||
|
|
@ -233,7 +233,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_DiscoversHandlersFromPage()
|
public void OnProvidersExecuting_DiscoversHandlersFromPage()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithModelWithoutHandlers).GetTypeInfo();
|
var typeInfo = typeof(PageWithModelWithoutHandlers).GetTypeInfo();
|
||||||
var descriptor = new PageActionDescriptor();
|
var descriptor = new PageActionDescriptor();
|
||||||
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
var context = new PageApplicationModelProviderContext(descriptor, typeInfo);
|
||||||
|
|
@ -275,7 +275,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_DiscoversPropertiesFromModel()
|
public void OnProvidersExecuting_DiscoversPropertiesFromModel()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithModel).GetTypeInfo();
|
var typeInfo = typeof(PageWithModel).GetTypeInfo();
|
||||||
var modelType = typeof(TestPageModel);
|
var modelType = typeof(TestPageModel);
|
||||||
var descriptor = new PageActionDescriptor();
|
var descriptor = new PageActionDescriptor();
|
||||||
|
|
@ -309,7 +309,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_DiscoversHandlersFromModel()
|
public void OnProvidersExecuting_DiscoversHandlersFromModel()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithModel).GetTypeInfo();
|
var typeInfo = typeof(PageWithModel).GetTypeInfo();
|
||||||
var modelType = typeof(TestPageModel);
|
var modelType = typeof(TestPageModel);
|
||||||
var descriptor = new PageActionDescriptor();
|
var descriptor = new PageActionDescriptor();
|
||||||
|
|
@ -337,7 +337,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_EmptyPage()
|
public void OnProvidersExecuting_EmptyPage()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(EmptyPage).GetTypeInfo();
|
var typeInfo = typeof(EmptyPage).GetTypeInfo();
|
||||||
var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeInfo);
|
var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeInfo);
|
||||||
|
|
||||||
|
|
@ -358,7 +358,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_EmptyPageModel()
|
public void OnProvidersExecuting_EmptyPageModel()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(EmptyPageWithPageModel).GetTypeInfo();
|
var typeInfo = typeof(EmptyPageWithPageModel).GetTypeInfo();
|
||||||
var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeInfo);
|
var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeInfo);
|
||||||
|
|
||||||
|
|
@ -426,7 +426,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void CreateDescriptor_FindsHandlerMethod_OnModel()
|
public void CreateDescriptor_FindsHandlerMethod_OnModel()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithHandlerThatGetsIgnored).GetTypeInfo();
|
var typeInfo = typeof(PageWithHandlerThatGetsIgnored).GetTypeInfo();
|
||||||
var modelType = typeof(ModelWithHandler);
|
var modelType = typeof(ModelWithHandler);
|
||||||
var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeInfo);
|
var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeInfo);
|
||||||
|
|
@ -473,7 +473,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void OnProvidersExecuting_FindsHandlerMethodOnPage_WhenModelIsNotAnnotatedWithPageModelAttribute()
|
public void OnProvidersExecuting_FindsHandlerMethodOnPage_WhenModelIsNotAnnotatedWithPageModelAttribute()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithHandler).GetTypeInfo();
|
var typeInfo = typeof(PageWithHandler).GetTypeInfo();
|
||||||
var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeInfo);
|
var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeInfo);
|
||||||
|
|
||||||
|
|
@ -524,7 +524,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void PopulateHandlerMethods_DiscoversHandlersFromBaseType()
|
public void PopulateHandlerMethods_DiscoversHandlersFromBaseType()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(InheritsMethods).GetTypeInfo();
|
var typeInfo = typeof(InheritsMethods).GetTypeInfo();
|
||||||
var baseType = typeof(TestSetPageModel);
|
var baseType = typeof(TestSetPageModel);
|
||||||
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
||||||
|
|
@ -575,7 +575,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void PopulateHandlerMethods_IgnoresNonPublicMethods()
|
public void PopulateHandlerMethods_IgnoresNonPublicMethods()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(ProtectedModel).GetTypeInfo();
|
var typeInfo = typeof(ProtectedModel).GetTypeInfo();
|
||||||
var baseType = typeof(TestSetPageModel);
|
var baseType = typeof(TestSetPageModel);
|
||||||
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
||||||
|
|
@ -603,7 +603,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void PopulateHandlerMethods_IgnoreGenericTypeParameters()
|
public void PopulateHandlerMethods_IgnoreGenericTypeParameters()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(GenericClassModel).GetTypeInfo();
|
var typeInfo = typeof(GenericClassModel).GetTypeInfo();
|
||||||
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
||||||
|
|
||||||
|
|
@ -626,7 +626,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void PopulateHandlerMethods_IgnoresStaticMethods()
|
public void PopulateHandlerMethods_IgnoresStaticMethods()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageModelWithStaticHandler).GetTypeInfo();
|
var typeInfo = typeof(PageModelWithStaticHandler).GetTypeInfo();
|
||||||
var expected = typeInfo.GetMethod(nameof(PageModelWithStaticHandler.OnGet), BindingFlags.Public | BindingFlags.Instance);
|
var expected = typeInfo.GetMethod(nameof(PageModelWithStaticHandler.OnGet), BindingFlags.Public | BindingFlags.Instance);
|
||||||
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
||||||
|
|
@ -656,7 +656,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void PopulateHandlerMethods_IgnoresAbstractMethods()
|
public void PopulateHandlerMethods_IgnoresAbstractMethods()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageModelWithAbstractMethod).GetTypeInfo();
|
var typeInfo = typeof(PageModelWithAbstractMethod).GetTypeInfo();
|
||||||
var expected = typeInfo.GetMethod(nameof(PageModelWithAbstractMethod.OnGet), BindingFlags.Public | BindingFlags.Instance);
|
var expected = typeInfo.GetMethod(nameof(PageModelWithAbstractMethod.OnGet), BindingFlags.Public | BindingFlags.Instance);
|
||||||
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
||||||
|
|
@ -684,7 +684,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void PopulateHandlerMethods_IgnoresMethodWithNonHandlerAttribute()
|
public void PopulateHandlerMethods_IgnoresMethodWithNonHandlerAttribute()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithNonHandlerMethod).GetTypeInfo();
|
var typeInfo = typeof(PageWithNonHandlerMethod).GetTypeInfo();
|
||||||
var expected = typeInfo.GetMethod(nameof(PageWithNonHandlerMethod.OnGet), BindingFlags.Public | BindingFlags.Instance);
|
var expected = typeInfo.GetMethod(nameof(PageWithNonHandlerMethod.OnGet), BindingFlags.Public | BindingFlags.Instance);
|
||||||
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
||||||
|
|
@ -715,7 +715,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void CreateHandlerModel_ParsesMethod()
|
public void CreateHandlerModel_ParsesMethod()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageModelWithHandlerNames).GetTypeInfo();
|
var typeInfo = typeof(PageModelWithHandlerNames).GetTypeInfo();
|
||||||
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
||||||
|
|
||||||
|
|
@ -749,7 +749,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void CreateHandlerMethods_AddsParameterDescriptors()
|
public void CreateHandlerMethods_AddsParameterDescriptors()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(PageWithHandlerParameters).GetTypeInfo();
|
var typeInfo = typeof(PageWithHandlerParameters).GetTypeInfo();
|
||||||
var expected = typeInfo.GetMethod(nameof(PageWithHandlerParameters.OnPost));
|
var expected = typeInfo.GetMethod(nameof(PageWithHandlerParameters.OnPost));
|
||||||
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
||||||
|
|
@ -793,7 +793,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void PopulateHandlerProperties_UsesPropertyHelpers_ToFindProperties()
|
public void PopulateHandlerProperties_UsesPropertyHelpers_ToFindProperties()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(HidesAProperty).GetTypeInfo();
|
var typeInfo = typeof(HidesAProperty).GetTypeInfo();
|
||||||
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
||||||
|
|
||||||
|
|
@ -826,7 +826,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
public void PopulateHandlerProperties_SupportsGet_OnProperty()
|
public void PopulateHandlerProperties_SupportsGet_OnProperty()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var provider = new TestPageApplicationModelProvider();
|
var provider = new DefaultPageApplicationModelProvider();
|
||||||
var typeInfo = typeof(ModelSupportsGetOnProperty).GetTypeInfo();
|
var typeInfo = typeof(ModelSupportsGetOnProperty).GetTypeInfo();
|
||||||
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
var pageModel = new PageApplicationModel(new PageActionDescriptor(), typeInfo, new object[0]);
|
||||||
|
|
||||||
|
|
@ -898,14 +898,6 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
Assert.Equal(expectedHandler, handler);
|
Assert.Equal(expectedHandler, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestPageApplicationModelProvider : DefaultPageApplicationModelProvider
|
|
||||||
{
|
|
||||||
public TestPageApplicationModelProvider(IOptions<MvcOptions> mvcOptions = null)
|
|
||||||
: base(mvcOptions : new TestOptionsManager<MvcOptions>())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class PageWithModelWithoutHandlers : Page
|
private class PageWithModelWithoutHandlers : Page
|
||||||
{
|
{
|
||||||
public ModelWithoutHandler Model { get; }
|
public ModelWithoutHandler Model { get; }
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
||||||
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
|
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
|
||||||
using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
|
using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
|
||||||
|
|
@ -20,7 +21,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
|
|
||||||
var compilerProvider = GetCompilerProvider();
|
var compilerProvider = GetCompilerProvider();
|
||||||
|
|
||||||
var options = new TestOptionsManager<RazorPagesOptions>();
|
var razorPagesOptions = new TestOptionsManager<RazorPagesOptions>();
|
||||||
|
var mvcOptions = new TestOptionsManager<MvcOptions>();
|
||||||
|
|
||||||
var provider1 = new Mock<IPageApplicationModelProvider>();
|
var provider1 = new Mock<IPageApplicationModelProvider>();
|
||||||
var provider2 = new Mock<IPageApplicationModelProvider>();
|
var provider2 = new Mock<IPageApplicationModelProvider>();
|
||||||
|
|
@ -71,7 +73,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
var loader = new DefaultPageLoader(
|
var loader = new DefaultPageLoader(
|
||||||
providers,
|
providers,
|
||||||
compilerProvider,
|
compilerProvider,
|
||||||
options);
|
razorPagesOptions,
|
||||||
|
mvcOptions);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = loader.Load(new PageActionDescriptor());
|
var result = loader.Load(new PageActionDescriptor());
|
||||||
|
|
@ -87,7 +90,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
// Arrange
|
// Arrange
|
||||||
var descriptor = new PageActionDescriptor();
|
var descriptor = new PageActionDescriptor();
|
||||||
var compilerProvider = GetCompilerProvider();
|
var compilerProvider = GetCompilerProvider();
|
||||||
var options = new TestOptionsManager<RazorPagesOptions>();
|
var razorPagesOptions = new TestOptionsManager<RazorPagesOptions>();
|
||||||
|
var mvcOptions = new TestOptionsManager<MvcOptions>();
|
||||||
|
|
||||||
var provider1 = new Mock<IPageApplicationModelProvider>();
|
var provider1 = new Mock<IPageApplicationModelProvider>();
|
||||||
provider1.SetupGet(p => p.Order).Returns(10);
|
provider1.SetupGet(p => p.Order).Returns(10);
|
||||||
|
|
@ -132,7 +136,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
var loader = new DefaultPageLoader(
|
var loader = new DefaultPageLoader(
|
||||||
providers,
|
providers,
|
||||||
compilerProvider,
|
compilerProvider,
|
||||||
options);
|
razorPagesOptions,
|
||||||
|
mvcOptions);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = loader.Load(new PageActionDescriptor());
|
var result = loader.Load(new PageActionDescriptor());
|
||||||
|
|
@ -159,19 +164,21 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
});
|
});
|
||||||
var providers = new[] { provider.Object };
|
var providers = new[] { provider.Object };
|
||||||
|
|
||||||
var options = new TestOptionsManager<RazorPagesOptions>();
|
var razorPagesOptions = new TestOptionsManager<RazorPagesOptions>();
|
||||||
|
var mvcOptions = new TestOptionsManager<MvcOptions>();
|
||||||
var convention = new Mock<IPageApplicationModelConvention>();
|
var convention = new Mock<IPageApplicationModelConvention>();
|
||||||
convention.Setup(c => c.Apply(It.IsAny<PageApplicationModel>()))
|
convention.Setup(c => c.Apply(It.IsAny<PageApplicationModel>()))
|
||||||
.Callback((PageApplicationModel m) =>
|
.Callback((PageApplicationModel m) =>
|
||||||
{
|
{
|
||||||
Assert.Same(model, m);
|
Assert.Same(model, m);
|
||||||
});
|
});
|
||||||
options.Value.Conventions.Add(convention.Object);
|
razorPagesOptions.Value.Conventions.Add(convention.Object);
|
||||||
|
|
||||||
var loader = new DefaultPageLoader(
|
var loader = new DefaultPageLoader(
|
||||||
providers,
|
providers,
|
||||||
compilerProvider,
|
compilerProvider,
|
||||||
options);
|
razorPagesOptions,
|
||||||
|
mvcOptions);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = loader.Load(new PageActionDescriptor());
|
var result = loader.Load(new PageActionDescriptor());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue