using System; using System.Collections.Generic; using System.IO; using System.Net; namespace MediaBrowser.Model.Services { public interface IRequest { /// /// The underlying ASP.NET or HttpListener HttpRequest /// object OriginalRequest { get; } IResponse Response { get; } /// /// The name of the service being called (e.g. Request DTO Name) /// string OperationName { get; set; } /// /// The Verb / HttpMethod or Action for this request /// string Verb { get; } /// /// The Request DTO, after it has been deserialized. /// object Dto { get; set; } /// /// The request ContentType /// string ContentType { get; } bool IsLocal { get; } string UserAgent { get; } IDictionary Cookies { get; } /// /// The expected Response ContentType for this request /// string ResponseContentType { get; set; } /// /// Whether the ResponseContentType has been explicitly overrided or whether it was just the default /// bool HasExplicitResponseContentType { get; } /// /// Attach any data to this request that all filters and services can access. /// Dictionary Items { get; } QueryParamCollection Headers { get; } QueryParamCollection QueryString { get; } QueryParamCollection FormData { get; } string RawUrl { get; } string AbsoluteUri { get; } /// /// The Remote Ip as reported by Request.UserHostAddress /// string UserHostAddress { get; } /// /// The Remote Ip as reported by X-Forwarded-For, X-Real-IP or Request.UserHostAddress /// string RemoteIp { get; } /// /// The value of the Authorization Header used to send the Api Key, null if not available /// string Authorization { get; } /// /// e.g. is https or not /// bool IsSecureConnection { get; } string[] AcceptTypes { get; } string PathInfo { get; } Stream InputStream { get; } long ContentLength { get; } /// /// Access to the multi-part/formdata files posted on this request /// IHttpFile[] Files { get; } /// /// The value of the Referrer, null if not available /// Uri UrlReferrer { get; } } public interface IHttpFile { string Name { get; } string FileName { get; } long ContentLength { get; } string ContentType { get; } Stream InputStream { get; } } public interface IRequiresRequest { IRequest Request { get; set; } } public interface IResponse { /// /// The underlying ASP.NET or HttpListener HttpResponse /// object OriginalResponse { get; } IRequest Request { get; } int StatusCode { get; set; } string StatusDescription { get; set; } string ContentType { get; set; } void AddHeader(string name, string value); string GetHeader(string name); void Redirect(string url); Stream OutputStream { get; } /// /// The Response DTO /// object Dto { get; set; } /// /// Write once to the Response Stream then close it. /// /// void Write(string text); /// /// Buffer the Response OutputStream so it can be written in 1 batch /// bool UseBufferedStream { get; set; } /// /// Signal that this response has been handled and no more processing should be done. /// When used in a request or response filter, no more filters or processing is done on this request. /// void Close(); /// /// Calls Response.End() on ASP.NET HttpResponse otherwise is an alias for Close(). /// Useful when you want to prevent ASP.NET to provide it's own custom error page. /// void End(); /// /// Response.Flush() and OutputStream.Flush() seem to have different behaviour in ASP.NET /// void Flush(); /// /// Gets a value indicating whether this instance is closed. /// bool IsClosed { get; } void SetContentLength(long contentLength); bool KeepAlive { get; set; } //Add Metadata to Response Dictionary Items { get; } } }