using Apewer.Network; using System; using System.Collections.Generic; using System.IO; using System.Text; namespace Apewer.Web { /// API 服务程序。 public abstract class ApiProvider : IDisposable { /// 在调用 API 前,接收选项实例。 public ApiOptions Options { get; set; } #region Implement /// 调用 API 前的检查,可返回错误信息以忽略 POST 内容。 public virtual string PreInvoke() { return null; } /// 读取请求前的检查,可返回错误信息以忽略 POST 内容。 public virtual string PreRead() { return null; } /// 写入响应前的检查,可返回错误信息以终止输出。 public virtual string PreWrite() { return null; } /// 发送完毕后执行。 public virtual void Sent() { } /// 结束本次请求和响应。 public virtual void End() { } /// 释放非托管资源。 public virtual void Dispose() { } #endregion #region Request /// 获取 HTTP 方法。 public abstract HttpMethod GetMethod(); /// 获取客户端的 IP 地址。 public abstract string GetClientIP(); /// 获取请求的 URL。 public abstract Uri GetUrl(); /// 获取请求的 Referrer。 public abstract string GetReferrer(); /// 获取请求的头。 public abstract HttpHeaders GetHeaders(); /// 获取请求的内容类型。 public abstract string GetContentType(); /// 获取请求的内容长度。 public abstract long GetContentLength(); /// 获取请求的内容。 public abstract Stream RequestBody(); #endregion #region Response /// 设置 HTTP 状态。 public abstract void SetStatus(int status, int subStatus = 0); /// 设置响应的头。 public abstract string SetHeader(string name, string value); /// 设置响应的缓存秒数,设置为 0 即不允许缓存。 public abstract void SetCache(int seconds); /// 设置响应的缓存秒数。 public abstract void SetContentType(string value); /// 设置响应的内容长度。 public abstract void SetContentLength(long value); /// 设置响应重定向。 public abstract void SetRedirect(string location); /// 获取 Response 流。 public abstract Stream ResponseBody(); #endregion } /// API 服务程序。 public abstract class ApiProvider : ApiProvider { /// HttpContext public abstract TContext Context { get; } } }