You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.1 KiB

4 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
8 months ago
4 years ago
4 years ago
4 years ago
8 months ago
4 years ago
  1. using Apewer.Network;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Text;
  6. namespace Apewer.Web
  7. {
  8. /// <summary>API 服务程序。</summary>
  9. public abstract class ApiProvider : IDisposable
  10. {
  11. /// <summary>在调用 API 前,接收选项实例。</summary>
  12. public ApiOptions Options { get; set; }
  13. #region Implement
  14. /// <summary>调用 API 前的检查,可返回错误信息以忽略 POST 内容。</summary>
  15. public virtual string PreInvoke() { return null; }
  16. /// <summary>读取请求前的检查,可返回错误信息以忽略 POST 内容。</summary>
  17. public virtual string PreRead() { return null; }
  18. /// <summary>写入响应前的检查,可返回错误信息以终止输出。</summary>
  19. public virtual string PreWrite() { return null; }
  20. /// <summary>发送完毕后执行。</summary>
  21. public virtual void Sent() { }
  22. /// <summary>结束本次请求和响应。</summary>
  23. public virtual void End() { }
  24. /// <summary>释放非托管资源。</summary>
  25. public virtual void Dispose() { }
  26. #endregion
  27. #region Request
  28. /// <summary>获取 HTTP 方法。</summary>
  29. public abstract HttpMethod GetMethod();
  30. /// <summary>获取客户端的 IP 地址。</summary>
  31. public abstract string GetClientIP();
  32. /// <summary>获取请求的 URL。</summary>
  33. public abstract Uri GetUrl();
  34. /// <summary>获取请求的 Referrer。</summary>
  35. public abstract string GetReferrer();
  36. /// <summary>获取请求的头。</summary>
  37. public abstract HttpHeaders GetHeaders();
  38. /// <summary>获取请求的内容类型。</summary>
  39. public abstract string GetContentType();
  40. /// <summary>获取请求的内容长度。</summary>
  41. public abstract long GetContentLength();
  42. /// <summary>获取请求的内容。</summary>
  43. public abstract Stream RequestBody();
  44. #endregion
  45. #region Response
  46. /// <summary>设置 HTTP 状态。</summary>
  47. public abstract void SetStatus(int status, int subStatus = 0);
  48. /// <summary>设置响应的头。</summary>
  49. public abstract string SetHeader(string name, string value);
  50. /// <summary>设置响应的缓存秒数,设置为 0 即不允许缓存。</summary>
  51. public abstract void SetCache(int seconds);
  52. /// <summary>设置响应的缓存秒数。</summary>
  53. public abstract void SetContentType(string value);
  54. /// <summary>设置响应的内容长度。</summary>
  55. public abstract void SetContentLength(long value);
  56. /// <summary>设置响应重定向。</summary>
  57. public abstract void SetRedirect(string location);
  58. /// <summary>获取 Response 流。</summary>
  59. public abstract Stream ResponseBody();
  60. #endregion
  61. }
  62. /// <summary>API 服务程序。</summary>
  63. public abstract class ApiProvider<TContext> : ApiProvider
  64. {
  65. /// <summary>HttpContext</summary>
  66. public abstract TContext Context { get; }
  67. }
  68. }