-
-
Notifications
You must be signed in to change notification settings - Fork 722
/
AzureHttpContext.cs
104 lines (82 loc) · 3.14 KB
/
AzureHttpContext.cs
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
99
100
101
102
103
104
using System.Security.Claims;
using HotChocolate.AspNetCore;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Primitives;
using Microsoft.Net.Http.Headers;
namespace HotChocolate.AzureFunctions.IsolatedProcess;
internal sealed class AzureHttpContext : HttpContext
{
private readonly DefaultHttpContext _innerContext;
private readonly AzureHttpResponse _innerResponse;
public AzureHttpContext(HttpRequestData requestData)
{
if (requestData is null)
{
throw new ArgumentNullException(nameof(requestData));
}
_innerContext = new DefaultHttpContext();
_innerResponse = new AzureHttpResponse(_innerContext.Response, requestData);
var contentType =
requestData.Headers.TryGetValues(HeaderNames.ContentType, out var headerValue)
? headerValue.First()
: ContentType.Json;
_innerContext.User = new ClaimsPrincipal(requestData.Identities);
var request = _innerContext.Request;
request.Method = requestData.Method;
request.Scheme = requestData.Url.Scheme;
request.Host = new HostString(requestData.Url.Host, requestData.Url.Port);
request.Path = new PathString(requestData.Url.AbsolutePath);
request.QueryString = new QueryString(requestData.Url.Query);
request.Body = requestData.Body;
request.ContentType = contentType;
foreach (var (key, value) in requestData.Headers)
{
request.Headers.TryAdd(key, new StringValues(value.ToArray()));
}
foreach(var (key, value) in requestData.FunctionContext.Items)
{
Items.Add(key, value);
}
}
public override IFeatureCollection Features => _innerContext.Features;
public override HttpRequest Request => _innerContext.Request;
public override HttpResponse Response => _innerResponse;
public override ConnectionInfo Connection => _innerContext.Connection;
public override WebSocketManager WebSockets => _innerContext.WebSockets;
public override ClaimsPrincipal User
{
get => _innerContext.User;
set => _innerContext.User = value;
}
public override IDictionary<object, object?> Items
{
get => _innerContext.Items;
set => _innerContext.Items = value;
}
public override IServiceProvider RequestServices
{
get => _innerContext.RequestServices;
set => _innerContext.RequestServices = value;
}
public override CancellationToken RequestAborted
{
get => _innerContext.RequestAborted;
set => _innerContext.RequestAborted = value;
}
public override string TraceIdentifier
{
get => _innerContext.TraceIdentifier;
set => _innerContext.TraceIdentifier = value;
}
public override ISession Session
{
get => _innerContext.Session;
set => _innerContext.Session = value;
}
public override void Abort()
=> _innerContext.Abort();
public HttpResponseData CreateResponseData()
=> _innerResponse.ResponseData;
}