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; }
}
}