integrating abstractions with routing
This commit is contained in:
parent
5676745562
commit
c796188231
|
|
@ -0,0 +1,18 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using Microsoft.AspNet.Routing;
|
||||
using Microsoft.AspNet.Routing.Owin;
|
||||
using Owin;
|
||||
|
||||
namespace RoutingSample
|
||||
{
|
||||
public static class AppBuilderExtensions
|
||||
{
|
||||
public static IRouteCollection UseRouter(this IAppBuilder app)
|
||||
{
|
||||
IRouteCollection routes = null;
|
||||
app.UseBuilder((b) => routes = b.UseRouter());
|
||||
return routes;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,8 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Abstractions;
|
||||
using Microsoft.AspNet.PipelineCore.Owin;
|
||||
using Microsoft.AspNet.Routing;
|
||||
|
||||
namespace RoutingSample
|
||||
|
|
@ -16,9 +18,10 @@ namespace RoutingSample
|
|||
_appFunc = appFunc;
|
||||
}
|
||||
|
||||
public Task Invoke(IDictionary<string, object> context)
|
||||
public Task Invoke(HttpContext context)
|
||||
{
|
||||
return _appFunc(context);
|
||||
var owinContext = context.GetFeature<ICanHasOwinEnvironment>().Environment;
|
||||
return _appFunc(owinContext);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,10 @@ using System.Text;
|
|||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Routing.Owin;
|
||||
using Owin;
|
||||
using Microsoft.AspNet.PipelineCore.Owin;
|
||||
using Microsoft.AspNet.Routing;
|
||||
using System;
|
||||
using Microsoft.AspNet.Abstractions;
|
||||
|
||||
namespace RoutingSample
|
||||
{
|
||||
|
|
@ -14,6 +18,7 @@ namespace RoutingSample
|
|||
public void Configuration(IAppBuilder appBuilder)
|
||||
{
|
||||
var routes = appBuilder.UseRouter();
|
||||
|
||||
|
||||
OwinRouteEndpoint endpoint1 = new OwinRouteEndpoint(async (context) => await WriteToBodyAsync(context, "match1"));
|
||||
OwinRouteEndpoint endpoint2 = new OwinRouteEndpoint(async (context) => await WriteToBodyAsync(context, "Hello, World!"));
|
||||
|
|
|
|||
|
|
@ -1,16 +1,21 @@
|
|||
{
|
||||
"version": "0.1-alpha-*",
|
||||
"dependencies": {
|
||||
"Microsoft.AspNet.Abstractions" : "0.1-alpha-*",
|
||||
"Microsoft.AspNet.AppBuilderSupport": "0.1-alpha-*",
|
||||
"Microsoft.AspNet.FeatureModel": "0.1-alpha-*",
|
||||
"Microsoft.AspNet.HttpFeature": "0.1-alpha-*",
|
||||
"Microsoft.AspNet.PipelineCore": "0.1-alpha-*",
|
||||
"Microsoft.AspNet.Routing" : ""
|
||||
},
|
||||
"configurations": {
|
||||
"net45": {
|
||||
"dependencies": {
|
||||
"Owin": "1.0",
|
||||
"Microsoft.Owin" : "2.1.0",
|
||||
"Microsoft.Owin.Host.HttpListener" : "2.1.0",
|
||||
"Microsoft.Owin.Hosting" : "2.1.0"
|
||||
}
|
||||
"dependencies": {
|
||||
"Owin": "1.0",
|
||||
"Microsoft.Owin" : "2.1.0",
|
||||
"Microsoft.Owin.Host.HttpListener" : "2.1.0",
|
||||
"Microsoft.Owin.Hosting" : "2.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,12 +1,11 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNet.Routing
|
||||
{
|
||||
internal class DefaultRouteEngine : IRouteEngine
|
||||
public class DefaultRouteEngine : IRouteEngine
|
||||
{
|
||||
public DefaultRouteEngine(IRouteCollection routes)
|
||||
{
|
||||
|
|
@ -19,7 +18,7 @@ namespace Microsoft.AspNet.Routing
|
|||
private set;
|
||||
}
|
||||
|
||||
public async Task<bool> Invoke(IDictionary<string, object> context)
|
||||
public async Task<bool> Invoke(HttpContext context)
|
||||
{
|
||||
RouteContext routeContext = new RouteContext(context);
|
||||
|
||||
|
|
@ -30,6 +29,8 @@ namespace Microsoft.AspNet.Routing
|
|||
RouteMatch match = route.Match(routeContext);
|
||||
if (match != null)
|
||||
{
|
||||
context.SetFeature<IRouteValues>(new RouteValues(match.Values));
|
||||
|
||||
await match.Endpoint.Invoke(context);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNet.Routing
|
||||
{
|
||||
public interface IRouteEndpoint
|
||||
{
|
||||
Task Invoke(IDictionary<string, object> context);
|
||||
Task Invoke(HttpContext context);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNet.Routing
|
||||
{
|
||||
public interface IRouteEngine
|
||||
{
|
||||
Task<bool> Invoke(IDictionary<string, object> context);
|
||||
Task<bool> Invoke(HttpContext context);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Microsoft.AspNet.Routing
|
||||
{
|
||||
public interface IRouteValues
|
||||
{
|
||||
IDictionary<string, object> Values
|
||||
{
|
||||
get;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,23 +1,20 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
#if NET45
|
||||
|
||||
using Owin;
|
||||
using Microsoft.AspNet.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNet.Routing.Owin
|
||||
{
|
||||
public static class AppBuilderExtensions
|
||||
public static class BuilderExtensions
|
||||
{
|
||||
public static IRouteCollection UseRouter(this IAppBuilder builder)
|
||||
public static IRouteCollection UseRouter(this IBuilder builder)
|
||||
{
|
||||
var routes = new DefaultRouteCollection();
|
||||
var engine = new DefaultRouteEngine(routes);
|
||||
|
||||
builder.Use(typeof(RouterMiddleware), engine);
|
||||
builder.Use((next) => new RouterMiddleware(next, engine).Invoke);
|
||||
|
||||
return routes;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -1,16 +1,13 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
#if NET45
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNet.Routing.Owin
|
||||
{
|
||||
public class RouterMiddleware
|
||||
{
|
||||
public RouterMiddleware(Func<IDictionary<string, object>, Task> next, IRouteEngine engine)
|
||||
public RouterMiddleware(RequestDelegate next, IRouteEngine engine)
|
||||
{
|
||||
Next = next;
|
||||
Engine = engine;
|
||||
|
|
@ -22,13 +19,13 @@ namespace Microsoft.AspNet.Routing.Owin
|
|||
set;
|
||||
}
|
||||
|
||||
private Func<IDictionary<string, object>, Task> Next
|
||||
private RequestDelegate Next
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public async Task Invoke(IDictionary<string, object> context)
|
||||
public async Task Invoke(HttpContext context)
|
||||
{
|
||||
if (!(await Engine.Invoke(context)))
|
||||
{
|
||||
|
|
@ -37,5 +34,3 @@ namespace Microsoft.AspNet.Routing.Owin
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -1,19 +1,19 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNet.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNet.Routing
|
||||
{
|
||||
public sealed class RouteContext
|
||||
{
|
||||
public RouteContext(IDictionary<string, object> context)
|
||||
public RouteContext(HttpContext context)
|
||||
{
|
||||
Context = context;
|
||||
|
||||
RequestPath = (string)context["owin.RequestPath"];
|
||||
RequestPath = context.Request.Path.Value;
|
||||
}
|
||||
|
||||
public IDictionary<string, object> Context
|
||||
public HttpContext Context
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Microsoft.AspNet.Routing
|
||||
{
|
||||
internal class RouteValues : IRouteValues
|
||||
{
|
||||
public RouteValues(IDictionary<string, object> values)
|
||||
{
|
||||
Values = values;
|
||||
}
|
||||
|
||||
public IDictionary<string, object> Values
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +1,10 @@
|
|||
{
|
||||
"version": "0.1-alpha-*",
|
||||
"dependencies": {
|
||||
"Microsoft.AspNet.Abstractions" : "0.1-alpha-*"
|
||||
},
|
||||
"configurations": {
|
||||
"net45": {
|
||||
"dependencies": {
|
||||
"Owin": "1.0"
|
||||
}
|
||||
},
|
||||
"net45": { },
|
||||
"k10" : { }
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue