diff --git a/samples/MvcSample.Web/Filters/BlockAnonynous.cs b/samples/MvcSample.Web/Filters/BlockAnonymous.cs similarity index 85% rename from samples/MvcSample.Web/Filters/BlockAnonynous.cs rename to samples/MvcSample.Web/Filters/BlockAnonymous.cs index 1affbcffb7..64b364da36 100644 --- a/samples/MvcSample.Web/Filters/BlockAnonynous.cs +++ b/samples/MvcSample.Web/Filters/BlockAnonymous.cs @@ -4,7 +4,7 @@ using Microsoft.AspNet.Mvc; namespace MvcSample.Web.Filters { - public class BlockAnonynous : AuthorizationFilterAttribute + public class BlockAnonymous : AuthorizationFilterAttribute { public override async Task Invoke(AuthorizationFilterContext context, Func next) { diff --git a/samples/MvcSample.Web/Filters/InspectResultPageAttribute.cs b/samples/MvcSample.Web/Filters/InspectResultPageAttribute.cs index 8ca5a20c6c..a5154a5e3b 100644 --- a/samples/MvcSample.Web/Filters/InspectResultPageAttribute.cs +++ b/samples/MvcSample.Web/Filters/InspectResultPageAttribute.cs @@ -9,11 +9,11 @@ namespace MvcSample.Web.Filters { public async override Task Invoke(ActionResultFilterContext context, Func next) { - ViewResult viewResult = context.Result as ViewResult; + var viewResult = context.ActionResult as ViewResult; if (viewResult != null) { - User user = viewResult.ViewData.Model as User; + var user = viewResult.ViewData.Model as User; if (user != null) { diff --git a/samples/MvcSample.Web/FiltersController.cs b/samples/MvcSample.Web/FiltersController.cs index ccdf178415..fcfba57584 100644 --- a/samples/MvcSample.Web/FiltersController.cs +++ b/samples/MvcSample.Web/FiltersController.cs @@ -9,7 +9,7 @@ namespace MvcSample.Web [PassThrough(Order = 0)] [PassThrough(Order = 2)] [InspectResultPage] - [BlockAnonynous] + [BlockAnonymous] [UserNameProvider(Order = -1)] public class FiltersController : Controller { diff --git a/src/Microsoft.AspNet.Mvc.Core/Extensions/AuthorizationFilterContextExtensions.cs b/src/Microsoft.AspNet.Mvc.Core/Extensions/FilterContextExtensions.cs similarity index 57% rename from src/Microsoft.AspNet.Mvc.Core/Extensions/AuthorizationFilterContextExtensions.cs rename to src/Microsoft.AspNet.Mvc.Core/Extensions/FilterContextExtensions.cs index 5828519569..d2fc5dd08a 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Extensions/AuthorizationFilterContextExtensions.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Extensions/FilterContextExtensions.cs @@ -3,9 +3,9 @@ using Microsoft.AspNet.Mvc.Filters; namespace Microsoft.AspNet.Mvc { - public static class AuthorizationFilterContextExtensions + public static class FilterContextExtensions { - public static bool HasAllowAnonymous([NotNull] this AuthorizationFilterContext context) + public static bool HasAllowAnonymous([NotNull] this FilterContext context) { return context.FilterItems.Any(item => item.Filter is IAllowAnonymous); } diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/ActionFilterContext.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/ActionFilterContext.cs index 215b15b30f..15023c06a3 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Filters/ActionFilterContext.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/ActionFilterContext.cs @@ -1,21 +1,18 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using Microsoft.AspNet.Mvc.Filters; namespace Microsoft.AspNet.Mvc { - public class ActionFilterContext + public class ActionFilterContext : FilterContext { - public ActionFilterContext(ActionContext actionContext, - IDictionary actionArguments) + public ActionFilterContext([NotNull] ActionContext actionContext, + [NotNull] IReadOnlyList filterItems, + [NotNull] IDictionary actionArguments) + : base(actionContext, filterItems) { - ActionContext = actionContext; ActionArguments = actionArguments; } public virtual IDictionary ActionArguments { get; private set; } - - public virtual ActionContext ActionContext { get; private set; } - - public virtual IActionResult Result { get; set; } } } diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/ActionFilterEndPoint.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/ActionFilterEndPoint.cs index 2ea2792c33..7e9d7689cf 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Filters/ActionFilterEndPoint.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/ActionFilterEndPoint.cs @@ -31,7 +31,7 @@ namespace Microsoft.AspNet.Mvc.Filters context.ActionArguments); var underlyingReturnType = TypeHelper.GetTaskInnerTypeOrNull(actionMethodInfo.ReturnType) ?? actionMethodInfo.ReturnType; - context.Result = _actionResultFactory.CreateActionResult( + context.ActionResult = _actionResultFactory.CreateActionResult( underlyingReturnType, actionReturnValue, context.ActionContext); diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/ActionResultFilterContext.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/ActionResultFilterContext.cs index e355c1607d..640a555aa7 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Filters/ActionResultFilterContext.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/ActionResultFilterContext.cs @@ -1,15 +1,14 @@ -namespace Microsoft.AspNet.Mvc +using System.Collections.Generic; +using Microsoft.AspNet.Mvc.Filters; + +namespace Microsoft.AspNet.Mvc { - public class ActionResultFilterContext + public class ActionResultFilterContext : FilterContext { - public ActionResultFilterContext(ActionContext actionContext, IActionResult initialResult) + public ActionResultFilterContext(ActionContext actionContext, IReadOnlyList filterItems, IActionResult initialResult) + : base(actionContext, filterItems) { - ActionContext = actionContext; - Result = initialResult; + ActionResult = initialResult; } - - public ActionContext ActionContext { get; private set; } - - public IActionResult Result { get; set; } } } diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/ActionResultFilterEndPoint.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/ActionResultFilterEndPoint.cs index d83da95d08..79fa0d6b23 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Filters/ActionResultFilterEndPoint.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/ActionResultFilterEndPoint.cs @@ -9,12 +9,12 @@ namespace Microsoft.AspNet.Mvc.Filters public async Task Invoke(ActionResultFilterContext context, Func next) { // result can get cleared at any point in the pipeline - if (context.Result == null) + if (context.ActionResult == null) { - context.Result = new EmptyResult(); + context.ActionResult = new EmptyResult(); } - await context.Result.ExecuteResultAsync(context.ActionContext); + await context.ActionResult.ExecuteResultAsync(context.ActionContext); } } } diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/AuthorizationFilterContext.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/AuthorizationFilterContext.cs index 5dedb7f8d0..11c5e01230 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Filters/AuthorizationFilterContext.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/AuthorizationFilterContext.cs @@ -1,25 +1,21 @@ using System.Collections.Generic; +using Microsoft.AspNet.Mvc.Filters; namespace Microsoft.AspNet.Mvc { - public class AuthorizationFilterContext + public class AuthorizationFilterContext : FilterContext { private IActionResult _actionResult; public AuthorizationFilterContext([NotNull] ActionContext actionContext, [NotNull] IReadOnlyList filterItems) + : base(actionContext, filterItems) { - ActionContext = actionContext; - FilterItems = filterItems; } public bool HasFailed { get; private set; } - public ActionContext ActionContext { get; private set; } - - public IReadOnlyList FilterItems { get; private set; } - // Result - public IActionResult ActionResult + public override IActionResult ActionResult { get { return _actionResult; } set diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/FilterContext.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/FilterContext.cs new file mode 100644 index 0000000000..4e6ba27236 --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/FilterContext.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; + +namespace Microsoft.AspNet.Mvc.Filters +{ + public class FilterContext + { + public FilterContext([NotNull] ActionContext actionContext, [NotNull] IReadOnlyList filterItems) + { + ActionContext = actionContext; + FilterItems = filterItems; + } + + public ActionContext ActionContext { get; private set; } + public IReadOnlyList FilterItems { get; private set; } + + // Result + public virtual IActionResult ActionResult { get; set; } + } +} diff --git a/src/Microsoft.AspNet.Mvc.Core/ReflectedActionInvoker.cs b/src/Microsoft.AspNet.Mvc.Core/ReflectedActionInvoker.cs index fa825b98cc..20e4279587 100644 --- a/src/Microsoft.AspNet.Mvc.Core/ReflectedActionInvoker.cs +++ b/src/Microsoft.AspNet.Mvc.Core/ReflectedActionInvoker.cs @@ -47,6 +47,7 @@ namespace Microsoft.AspNet.Mvc Select(fd => new FilterItem(fd)).ToList()); _filterProvider.Invoke(filterProviderContext); + var filterMetaItems = filterProviderContext.Result.ToArray(); PreArrangeFiltersInPipeline(filterProviderContext); @@ -72,7 +73,7 @@ namespace Microsoft.AspNet.Mvc var authZEndPoint = new AuthorizationFilterEndPoint(); _authorizationFilters.Add(authZEndPoint); - var authZContext = new AuthorizationFilterContext(_actionContext, filterProviderContext.Result.ToArray()); + var authZContext = new AuthorizationFilterContext(_actionContext, filterMetaItems); var authZPipeline = new FilterPipelineBuilder(_authorizationFilters, authZContext); await authZPipeline.InvokeAsync(); @@ -99,6 +100,7 @@ namespace Microsoft.AspNet.Mvc var parameterValues = await GetParameterValues(modelState); var actionFilterContext = new ActionFilterContext(_actionContext, + filterMetaItems, parameterValues); var actionEndPoint = new ReflectedActionFilterEndPoint(_actionResultFactory, controller); @@ -109,12 +111,12 @@ namespace Microsoft.AspNet.Mvc await actionFilterPipeline.InvokeAsync(); - actionResult = actionFilterContext.Result; + actionResult = actionFilterContext.ActionResult; } } } - var actionResultFilterContext = new ActionResultFilterContext(_actionContext, actionResult); + var actionResultFilterContext = new ActionResultFilterContext(_actionContext, filterMetaItems, actionResult); var actionResultFilterEndPoint = new ActionResultFilterEndPoint(); _actionResultFilters.Add(actionResultFilterEndPoint);