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

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