using System; using System.IO; using System.Collections.Generic; using System.Linq; namespace ln.http { public class HttpResponse { public HttpRequest HttpRequest { get; } public Stream ContentStream { get; private set; } public TextWriter ContentWriter { get; private set; } public bool HasCustomContentStream { get; private set; } int statusCode; string statusMessage; Dictionary> headers = new Dictionary>(); List cookies = new List(); public HttpResponse(HttpRequest httpRequest) { HttpRequest = httpRequest; ContentStream = new MemoryStream(); ContentWriter = new StreamWriter(ContentStream); StatusCode = 200; SetHeader("content-type", "text/html"); } public HttpResponse(HttpRequest httpRequest,string contentType) :this(httpRequest) { SetHeader("content-type", contentType); } public HttpResponse(HttpRequest httpRequest, Stream contentStream) { HttpRequest = httpRequest; ContentStream = contentStream; ContentWriter = null; HasCustomContentStream = true; StatusCode = 200; SetHeader("content-type", "text/html"); } public HttpResponse(HttpRequest httpRequest, Stream contentStream,string contentType) :this(httpRequest,contentStream) { SetHeader("content-type", contentType); } public String GetHeader(string name) => GetHeader(name, null); public String GetHeader(string name, string defValue) { return headers.ContainsKey(name) ? String.Join(",", headers[name.ToUpper()]) : defValue; } public String[] GetHeaderValues(string name) { return headers[name.ToUpper()].ToArray(); } public String[] GetHeaderNames() { return headers.Keys.ToArray(); } public void SetHeader(String name, String value) { name = name.ToUpper(); headers[name] = new List(); headers[name].Add(value); } public void AddHeader(String name, String value) { name = name.ToUpper(); if (!headers.ContainsKey(name)) headers[name] = new List(); headers[name].Add(value); } public void RemoveHeader(String name) { headers.Remove(name.ToUpper()); } public bool ContainsHeader(string headerName) { return headers.ContainsKey(headerName.ToUpper()); } public void AddCookie(string name,string value) { AddCookie(new HttpCookie(name, value)); } public void AddCookie(HttpCookie httpCookie) { cookies.Add(httpCookie); } public void RemoveCookie(HttpCookie httpCookie) { cookies.Remove(httpCookie); } public HttpCookie[] Cookies => cookies.ToArray(); public int StatusCode { get { return statusCode; } set { statusCode = value; statusMessage = HttpStatusCodes.GetStatusMessage(statusCode); } } public String StatusMessage { get { return statusMessage; } set { statusMessage = value; } } } }