From d1a0edb87ea4f24403c9b7273db41a4bfcab6e96 Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 7 Jan 2016 13:45:40 -0800 Subject: [PATCH] Updating to new options pattern --- samples/HttpOverridesSample/Startup.cs | 4 +-- .../ResponseBufferingMiddleware.cs | 1 - .../HttpMethodOverrideExtensions.cs | 15 +++++----- .../HttpMethodOverrideMiddleware.cs | 6 ++-- .../HttpMethodOverrideOptions.cs | 2 +- .../OverrideHeaderExtensions.cs | 28 +++++++++++++++---- .../OverrideHeaderMiddleware.cs | 6 ++-- .../OverrideHeaderOptions.cs | 4 ++- .../project.json | 3 +- .../OverrideHeaderMiddlewareTest.cs | 28 +++++++++---------- 10 files changed, 60 insertions(+), 37 deletions(-) diff --git a/samples/HttpOverridesSample/Startup.cs b/samples/HttpOverridesSample/Startup.cs index 4c71f32a93..ae17a73851 100644 --- a/samples/HttpOverridesSample/Startup.cs +++ b/samples/HttpOverridesSample/Startup.cs @@ -11,9 +11,9 @@ namespace HttpOverridesSample public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); - app.UseOverrideHeaders(options => + app.UseOverrideHeaders(new OverrideHeaderOptions { - options.ForwardedOptions = ForwardedHeaders.All; + ForwardedOptions = ForwardedHeaders.All }); app.UseHttpMethodOverride(); diff --git a/src/Microsoft.AspNet.Buffering/ResponseBufferingMiddleware.cs b/src/Microsoft.AspNet.Buffering/ResponseBufferingMiddleware.cs index e2af1cc4f6..21e56a0ee2 100644 --- a/src/Microsoft.AspNet.Buffering/ResponseBufferingMiddleware.cs +++ b/src/Microsoft.AspNet.Buffering/ResponseBufferingMiddleware.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading.Tasks; -using Microsoft.AspNet.Builder; using Microsoft.AspNet.Http; using Microsoft.AspNet.Http.Features; diff --git a/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideExtensions.cs b/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideExtensions.cs index 66aa5953a5..be2502dde1 100644 --- a/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideExtensions.cs +++ b/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideExtensions.cs @@ -3,6 +3,7 @@ using System; using Microsoft.AspNet.HttpOverrides; +using Microsoft.Extensions.Options; namespace Microsoft.AspNet.Builder { @@ -19,7 +20,8 @@ namespace Microsoft.AspNet.Builder { throw new ArgumentNullException(nameof(builder)); } - return builder.Use(next => new HttpMethodOverrideMiddleware(next, new HttpMethodOverrideOptions()).Invoke); + + return builder.UseMiddleware(); } /// @@ -28,19 +30,18 @@ namespace Microsoft.AspNet.Builder /// /// Denotes the element that contains the name of the resulting method type. /// - public static IApplicationBuilder UseHttpMethodOverride(this IApplicationBuilder builder, Action configureOptions) + public static IApplicationBuilder UseHttpMethodOverride(this IApplicationBuilder builder, HttpMethodOverrideOptions options) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } - if (configureOptions == null) + if (options == null) { - throw new ArgumentNullException(nameof(configureOptions)); + throw new ArgumentNullException(nameof(options)); } - var options = new HttpMethodOverrideOptions(); - configureOptions(options); - return builder.Use(next => new HttpMethodOverrideMiddleware(next, options).Invoke); + + return builder.UseMiddleware(Options.Create(options)); } } } diff --git a/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideMiddleware.cs b/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideMiddleware.cs index 621f355af2..df65207d35 100644 --- a/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideMiddleware.cs +++ b/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideMiddleware.cs @@ -3,7 +3,9 @@ using System; using System.Threading.Tasks; +using Microsoft.AspNet.Builder; using Microsoft.AspNet.Http; +using Microsoft.Extensions.Options; namespace Microsoft.AspNet.HttpOverrides { @@ -13,7 +15,7 @@ namespace Microsoft.AspNet.HttpOverrides private readonly RequestDelegate _next; private readonly HttpMethodOverrideOptions _options; - public HttpMethodOverrideMiddleware(RequestDelegate next, HttpMethodOverrideOptions options) + public HttpMethodOverrideMiddleware(RequestDelegate next, IOptions options) { if (next == null) { @@ -24,7 +26,7 @@ namespace Microsoft.AspNet.HttpOverrides throw new ArgumentNullException(nameof(options)); } _next = next; - _options = options; + _options = options.Value; } public async Task Invoke(HttpContext context) diff --git a/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideOptions.cs b/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideOptions.cs index 033669acab..e6ade4a274 100644 --- a/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideOptions.cs +++ b/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideOptions.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -namespace Microsoft.AspNet.HttpOverrides +namespace Microsoft.AspNet.Builder { public class HttpMethodOverrideOptions { diff --git a/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderExtensions.cs b/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderExtensions.cs index b02d7c5191..e22e4af34d 100644 --- a/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderExtensions.cs +++ b/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderExtensions.cs @@ -3,6 +3,7 @@ using System; using Microsoft.AspNet.HttpOverrides; +using Microsoft.Extensions.Options; namespace Microsoft.AspNet.Builder { @@ -14,19 +15,34 @@ namespace Microsoft.AspNet.Builder /// /// Enables the different override options. /// - public static IApplicationBuilder UseOverrideHeaders(this IApplicationBuilder builder, Action configureOptions) + public static IApplicationBuilder UseOverrideHeaders(this IApplicationBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } - if (configureOptions == null) + + return builder.UseMiddleware(); + } + + /// + /// Forwards proxied headers onto current request + /// + /// + /// Enables the different override options. + /// + public static IApplicationBuilder UseOverrideHeaders(this IApplicationBuilder builder, OverrideHeaderOptions options) + { + if (builder == null) { - throw new ArgumentNullException(nameof(configureOptions)); + throw new ArgumentNullException(nameof(builder)); } - var options = new OverrideHeaderOptions(); - configureOptions(options); - return builder.Use(next => new OverrideHeaderMiddleware(next, options).Invoke); + if (options == null) + { + throw new ArgumentNullException(nameof(options)); + } + + return builder.UseMiddleware(Options.Create(options)); } } } diff --git a/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderMiddleware.cs b/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderMiddleware.cs index f300f65d56..9eb8564c11 100644 --- a/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderMiddleware.cs +++ b/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderMiddleware.cs @@ -4,7 +4,9 @@ using System; using System.Net; using System.Threading.Tasks; +using Microsoft.AspNet.Builder; using Microsoft.AspNet.Http; +using Microsoft.Extensions.Options; namespace Microsoft.AspNet.HttpOverrides { @@ -19,7 +21,7 @@ namespace Microsoft.AspNet.HttpOverrides private readonly OverrideHeaderOptions _options; private readonly RequestDelegate _next; - public OverrideHeaderMiddleware(RequestDelegate next, OverrideHeaderOptions options) + public OverrideHeaderMiddleware(RequestDelegate next, IOptions options) { if (next == null) { @@ -30,7 +32,7 @@ namespace Microsoft.AspNet.HttpOverrides throw new ArgumentNullException(nameof(options)); } - _options = options; + _options = options.Value; _next = next; } diff --git a/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderOptions.cs b/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderOptions.cs index 8b4f0756f4..eb63f71b58 100644 --- a/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderOptions.cs +++ b/src/Microsoft.AspNet.HttpOverrides/OverrideHeaderOptions.cs @@ -1,7 +1,9 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -namespace Microsoft.AspNet.HttpOverrides +using Microsoft.AspNet.HttpOverrides; + +namespace Microsoft.AspNet.Builder { public class OverrideHeaderOptions { diff --git a/src/Microsoft.AspNet.HttpOverrides/project.json b/src/Microsoft.AspNet.HttpOverrides/project.json index 93c184ad7a..01612e537c 100644 --- a/src/Microsoft.AspNet.HttpOverrides/project.json +++ b/src/Microsoft.AspNet.HttpOverrides/project.json @@ -10,7 +10,8 @@ "url": "git://github.com/aspnet/basicmiddleware" }, "dependencies": { - "Microsoft.AspNet.Http.Extensions": "1.0.0-*" + "Microsoft.AspNet.Http.Extensions": "1.0.0-*", + "Microsoft.Extensions.Options": "1.0.0-*" }, "frameworks": { "net451": { }, diff --git a/test/Microsoft.AspNet.HttpOverrides.Tests/OverrideHeaderMiddlewareTest.cs b/test/Microsoft.AspNet.HttpOverrides.Tests/OverrideHeaderMiddlewareTest.cs index b6ef29b458..7f148cbe48 100644 --- a/test/Microsoft.AspNet.HttpOverrides.Tests/OverrideHeaderMiddlewareTest.cs +++ b/test/Microsoft.AspNet.HttpOverrides.Tests/OverrideHeaderMiddlewareTest.cs @@ -20,9 +20,9 @@ namespace Microsoft.AspNet.HttpOverrides var builder = new WebApplicationBuilder() .Configure(app => { - app.UseOverrideHeaders(options => + app.UseOverrideHeaders(new OverrideHeaderOptions { - options.ForwardedOptions = ForwardedHeaders.XForwardedFor; + ForwardedOptions = ForwardedHeaders.XForwardedFor }); app.Run(context => { @@ -47,9 +47,9 @@ namespace Microsoft.AspNet.HttpOverrides var builder = new WebApplicationBuilder() .Configure(app => { - app.UseOverrideHeaders(options => + app.UseOverrideHeaders(new OverrideHeaderOptions { - options.ForwardedOptions = ForwardedHeaders.XForwardedFor; + ForwardedOptions = ForwardedHeaders.XForwardedFor }); app.Run(context => { @@ -74,9 +74,9 @@ namespace Microsoft.AspNet.HttpOverrides var builder = new WebApplicationBuilder() .Configure(app => { - app.UseOverrideHeaders(options => + app.UseOverrideHeaders(new OverrideHeaderOptions { - options.ForwardedOptions = ForwardedHeaders.XForwardedHost; + ForwardedOptions = ForwardedHeaders.XForwardedHost }); app.Run(context => { @@ -101,9 +101,9 @@ namespace Microsoft.AspNet.HttpOverrides var builder = new WebApplicationBuilder() .Configure(app => { - app.UseOverrideHeaders(options => + app.UseOverrideHeaders(new OverrideHeaderOptions { - options.ForwardedOptions = ForwardedHeaders.XForwardedProto; + ForwardedOptions = ForwardedHeaders.XForwardedProto }); app.Run(context => { @@ -135,9 +135,9 @@ namespace Microsoft.AspNet.HttpOverrides var builder = new WebApplicationBuilder() .Configure(app => { - app.UseOverrideHeaders(options => + app.UseOverrideHeaders(new OverrideHeaderOptions { - options.ForwardedOptions = ForwardedHeaders.All; + ForwardedOptions = ForwardedHeaders.All }); app.Run(context => { @@ -166,9 +166,9 @@ namespace Microsoft.AspNet.HttpOverrides var builder = new WebApplicationBuilder() .Configure(app => { - app.UseOverrideHeaders(options => + app.UseOverrideHeaders(new OverrideHeaderOptions { - options.ForwardedOptions = ForwardedHeaders.None; + ForwardedOptions = ForwardedHeaders.None }); app.Run(context => { @@ -197,9 +197,9 @@ namespace Microsoft.AspNet.HttpOverrides var builder = new WebApplicationBuilder() .Configure(app => { - app.UseOverrideHeaders(options => + app.UseOverrideHeaders(new OverrideHeaderOptions { - options.ForwardedOptions = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; + ForwardedOptions = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); app.Run(context => {