forked from aspnet/AspNetWebStack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHttpMessageExtensions.cs
More file actions
157 lines (142 loc) · 6.48 KB
/
HttpMessageExtensions.cs
File metadata and controls
157 lines (142 loc) · 6.48 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// 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.Net.Http;
using System.ServiceModel.Channels;
namespace System.Web.Http.SelfHost.Channels
{
/// <summary>
/// Provides extension methods for getting an <see cref="HttpRequestMessage"/> instance or
/// an <see cref="HttpResponseMessage"/> instance from a <see cref="Message"/> instance and
/// provides extension methods for creating a <see cref="Message"/> instance from either an
/// <see cref="HttpRequestMessage"/> instance or an
/// <see cref="HttpResponseMessage"/> instance.
/// </summary>
internal static class HttpMessageExtensions
{
internal const string ToHttpRequestMessageMethodName = "ToHttpRequestMessage";
internal const string ToHttpResponseMessageMethodName = "ToHttpResponseMessage";
internal const string ToMessageMethodName = "ToMessage";
/// <summary>
/// Returns a reference to the <see cref="HttpRequestMessage"/>
/// instance held by the given <see cref="Message"/> or null if the <see cref="Message"/> does not
/// hold a reference to an <see cref="HttpRequestMessage"/>
/// instance.
/// </summary>
/// <param name="message">The given <see cref="Message"/> that holds a reference to an
/// <see cref="HttpRequestMessage"/> instance.
/// </param>
/// <returns>
/// A reference to the <see cref="HttpRequestMessage"/>
/// instance held by the given <see cref="Message"/> or null if the <see cref="Message"/> does not
/// hold a reference to an <see cref="HttpRequestMessage"/>
/// instance.
/// </returns>
public static HttpRequestMessage ToHttpRequestMessage(this Message message)
{
if (message == null)
{
throw Error.ArgumentNull("message");
}
HttpMessage httpMessage = message as HttpMessage;
if (httpMessage != null && httpMessage.IsRequest)
{
return httpMessage.GetHttpRequestMessage(false);
}
return null;
}
/// <summary>
/// Returns a reference to the <see cref="HttpResponseMessage"/>
/// instance held by the given <see cref="Message"/> or null if the <see cref="Message"/> does not
/// hold a reference to an <see cref="HttpResponseMessage"/>
/// instance.
/// </summary>
/// <param name="message">The given <see cref="Message"/> that holds a reference to an
/// <see cref="HttpResponseMessage"/> instance.
/// </param>
/// <returns>
/// A reference to the <see cref="HttpResponseMessage"/>
/// instance held by the given <see cref="Message"/> or null if the <see cref="Message"/> does not
/// hold a reference to an <see cref="HttpResponseMessage"/>
/// instance.
/// </returns>
public static HttpResponseMessage ToHttpResponseMessage(this Message message)
{
if (message == null)
{
throw Error.ArgumentNull("message");
}
HttpMessage httpMessage = message as HttpMessage;
if (httpMessage != null && !httpMessage.IsRequest)
{
return httpMessage.GetHttpResponseMessage(false);
}
return null;
}
/// <summary>
/// Returns a reference to the <see cref="HttpResponseMessage"/>
/// instance held by the given <see cref="Message"/> or null if the <see cref="Message"/> does not
/// hold a reference to an <see cref="HttpResponseMessage"/>
/// instance.
/// </summary>
/// <remarks>The caller takes over the ownership of the associated <see cref="HttpRequestMessage"/> and is responsible for its disposal.</remarks>
/// <param name="message">The given <see cref="Message"/> that holds a reference to an
/// <see cref="HttpResponseMessage"/> instance.
/// </param>
/// <returns>
/// A reference to the <see cref="HttpResponseMessage"/>
/// instance held by the given <see cref="Message"/> or null if the <see cref="Message"/> does not
/// hold a reference to an <see cref="HttpResponseMessage"/>
/// instance.
/// The caller is responsible for disposing any <see cref="HttpResponseMessage"/> instance returned.
/// </returns>
public static HttpResponseMessage ExtractHttpResponseMessage(this Message message)
{
if (message == null)
{
throw Error.ArgumentNull("message");
}
HttpMessage httpMessage = message as HttpMessage;
if (httpMessage != null && !httpMessage.IsRequest)
{
return httpMessage.GetHttpResponseMessage(true);
}
return null;
}
/// <summary>
/// Creates a new <see cref="Message"/> that holds a reference to the given
/// <see cref="HttpRequestMessage"/> instance.
/// </summary>
/// <param name="request">The <see cref="HttpRequestMessage"/>
/// instance to which the new <see cref="Message"/> should hold a reference.
/// </param>
/// <returns>A <see cref="Message"/> that holds a reference to the given
/// <see cref="HttpRequestMessage"/> instance.
/// </returns>
public static Message ToMessage(this HttpRequestMessage request)
{
if (request == null)
{
throw Error.ArgumentNull("request");
}
return new HttpMessage(request);
}
/// <summary>
/// Creates a new <see cref="Message"/> that holds a reference to the given
/// <see cref="HttpResponseMessage"/> instance.
/// </summary>
/// <param name="response">The <see cref="HttpResponseMessage"/>
/// instance to which the new <see cref="Message"/> should hold a reference.
/// </param>
/// <returns>A <see cref="Message"/> that holds a reference to the given
/// <see cref="HttpResponseMessage"/> instance.
/// </returns>
public static Message ToMessage(this HttpResponseMessage response)
{
if (response == null)
{
throw Error.ArgumentNull("response");
}
return new HttpMessage(response);
}
}
}