private static bool TryGetHttpRequestMessage(HttpRequestPacket packet, string virtualPath, string hostname, out HttpRequestMessage request) { try { request = new HttpRequestMessage { Content = packet.Content == null ? _emptyByteArrayContent : new ByteArrayContent(packet.Content), Version = packet.Version == "1.1" ? VERSION_1_1 : new Version(packet.Version), Method = new HttpMethod(packet.Method ?? "GET"), RequestUri = packet.BuildUri(virtualPath, hostname) }; packet.PopulateHeaders(request.Content.Headers, request.Headers); } catch { request = null; return(false); } return(true); }
internal static bool TryGetServiceMessage(this HttpRequestPacket request, out ServiceMessage message) { if (request == null) { throw new ArgumentNullException("request"); } message = new ServiceMessage(); //Build Request IHttpRequestFeature req = message as IHttpRequestFeature; Uri uri; try { uri = request.BuildUri(null, null); } catch { message = null; return(false); } req.Path = uri.AbsolutePath; req.Protocol = "HTTP/" + request.Version; req.QueryString = uri.Query; req.Method = request.Method; if (request.Content != null && request.Content.Length > 0) { message.CreateRequestBody(request.Content); } //Add Request Headers { var headers = new HeaderDictionary(); foreach (var hdr in request.Headers) { if (hdr.Key != null && hdr.Key.Trim().ToUpperInvariant() == "CONTENT-LENGTH") { continue; // Content-length is calculated based on actual content. } //NOTE: Client already folds Request Headers into RequestPacket, so there's no need to fold it again here. headers.Add(hdr.Key, hdr.Value.ToArray()); } if (message.OriginalRequestBody != null) { headers.Add("Content-Length", request.Content.Length.ToString()); } req.Headers = headers; } //Create Response message.CreateResponseBody(); IHttpResponseFeature resp = message as IHttpResponseFeature; resp.StatusCode = 200; //Add Response Headers { var headers = new HeaderDictionary(); headers.Add("Server", HTTP_RESPONSE_SERVER_HEADER[0]); resp.Headers = headers; } return(true); }