forked from aspnet/AspNetWebStack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHostedHttpRoute.cs
More file actions
98 lines (82 loc) · 3.52 KB
/
HostedHttpRoute.cs
File metadata and controls
98 lines (82 loc) · 3.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// 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.
using System.Collections.Generic;
using System.Net.Http;
using System.Web.Http.Routing;
using System.Web.Routing;
namespace System.Web.Http.WebHost.Routing
{
internal class HostedHttpRoute : IHttpRoute
{
public HostedHttpRoute(string uriTemplate, IDictionary<string, object> defaults, IDictionary<string, object> constraints, IDictionary<string, object> dataTokens, HttpMessageHandler handler)
{
RouteValueDictionary routeDefaults = defaults != null ? new RouteValueDictionary(defaults) : null;
RouteValueDictionary routeConstraints = constraints != null ? new RouteValueDictionary(constraints) : null;
RouteValueDictionary routeDataTokens = dataTokens != null ? new RouteValueDictionary(dataTokens) : null;
OriginalRoute = new HttpWebRoute(uriTemplate, routeDefaults, routeConstraints, routeDataTokens, HttpControllerRouteHandler.Instance, this);
Handler = handler;
}
public string RouteTemplate
{
get { return OriginalRoute.Url; }
}
public IDictionary<string, object> Defaults
{
get { return OriginalRoute.Defaults; }
}
public IDictionary<string, object> Constraints
{
get { return OriginalRoute.Constraints; }
}
public IDictionary<string, object> DataTokens
{
get { return OriginalRoute.DataTokens; }
}
public HttpMessageHandler Handler { get; private set; }
internal Route OriginalRoute { get; private set; }
public IHttpRouteData GetRouteData(string rootVirtualPath, HttpRequestMessage request)
{
if (rootVirtualPath == null)
{
throw Error.ArgumentNull("rootVirtualPath");
}
if (request == null)
{
throw Error.ArgumentNull("request");
}
HttpContextBase httpContextBase = request.GetHttpContext();
if (httpContextBase == null)
{
httpContextBase = new HttpRequestMessageContextWrapper(rootVirtualPath, request);
}
RouteData routeData = OriginalRoute.GetRouteData(httpContextBase);
if (routeData != null)
{
return new HostedHttpRouteData(routeData);
}
return null;
}
public IHttpVirtualPathData GetVirtualPath(HttpRequestMessage request, IDictionary<string, object> values)
{
if (request == null)
{
throw Error.ArgumentNull("request");
}
HttpContextBase httpContextBase = request.GetHttpContext();
if (httpContextBase != null)
{
HostedHttpRouteData routeData = request.GetRouteData() as HostedHttpRouteData;
if (routeData != null)
{
RequestContext requestContext = new RequestContext(httpContextBase, routeData.OriginalRouteData);
VirtualPathData virtualPathData = OriginalRoute.GetVirtualPath(requestContext, new RouteValueDictionary(values));
if (virtualPathData != null)
{
return new HostedHttpVirtualPathData(virtualPathData, routeData.Route);
}
}
}
return null;
}
}
}