private static HttpResponse GetResponseWithHeader(string headerName, string headerValue) { var headers = new HeaderDictionary(); if (headerValue != null) { headers.Add(headerName, headerValue); } return CreateResponse(headers); }
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; req.Body = new MemoryStream(request.Content); //Add Request Headers { var headers = new HeaderDictionary(); foreach (var hdr in request.Headers) { //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()); } req.Headers = headers; } //Create Response IHttpResponseFeature resp = message as IHttpResponseFeature; resp.StatusCode = 200; //Add Response Headers resp.Body = new MemoryStream(); { var headers = new HeaderDictionary(); headers.Add("Server", HTTP_RESPONSE_SERVER); resp.Headers = headers; //TODO: Something to think about: Should host add Date response header. //If so, shouldn't that be done at the time that the response is been transmitted //In which case, the subscriber should be responsible for adding/overwriting that value. //In any case, remember DateTime.UtcNow/Now is very slow, so use Environment.TickCount in addition to some //other mechanism that limits the number of times, DateTime.UtcNow is polled. } 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; }