自定义内容输出
在接口通讯时往往需要响应不同格式的内容,组件虽然默认集成了JSON
格式输出;但实际情况不同情况输出的格式都可能存在差异,这个时候针对API
提供不同格式输出就非常重要.组件支持使用者自定API
输出的数据格式,只需要实现IResult
接口即可。
IResult
public interface IResult { IHeaderItem ContentType { get; } int Length { get; set; } void Setting(HttpResponse response); bool HasBody { get; } void Write(PipeStream stream, HttpResponse response); }
基础响应类
public abstract class ResultBase : IResult { public virtual IHeaderItem ContentType => ContentTypes.TEXT_UTF8; public virtual int Length { get; set; } public virtual bool HasBody => true; public virtual void Setting(HttpResponse response) { } public virtual void Write(PipeStream stream, HttpResponse response) { } }
404的实现
public class NotFoundResult : ResultBase { public NotFoundResult(string message) { Message = message; } public NotFoundResult(string formater, params object[] data) : this(string.Format(formater, data)) { } public string Message { get; set; } public override bool HasBody => true; public override void Setting(HttpResponse response) { response.Request.Server.RequestError(); response.Code = "404"; response.CodeMsg = "not found"; response.Request.ClearStream(); } public override void Write(PipeStream stream, HttpResponse response) { stream.Write(Message); } }
默认Json实现
public class JsonResult : ResultBase { public JsonResult(object data) { Data = data; } public object Data { get; set; } public override IHeaderItem ContentType => ContentTypes.JSON; public override bool HasBody => true; public override void Write(PipeStream stream, HttpResponse response) { using (stream.LockFree()) { response.JsonSerializer.Serialize(response.JsonWriter, Data); response.JsonWriter.Flush(); } } }
在方法中使用
public object json(IHttpContext context)
{
return new JsonResult(new JsonMessage { message = "Hello, World!" });
}
下载内容Result
public class DownLoad : BeetleX.FastHttpApi.IResult { public DownLoad(string text) { Text = text; } public string Text { get; set; } public IHeaderItem ContentType => ContentTypes.OCTET_STREAM; public int Length { get; set; } public bool HasBody => true; public void Setting(HttpResponse response) { response.Header.Add("Content-Disposition", "attachment;filename=TcpBanchmarks.json"); } public void Write(PipeStream stream, HttpResponse response) { stream.Write(Text); } } }
在方法中使用
public object Download() { var items = Service.Default.GetStore(); string text = Newtonsoft.Json.JsonConvert.SerializeObject(items); return new DownLoad(text); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-09-17 dotnet core高吞吐Http api服务组件FastHttpApi
2014-09-17 azure存储压测的问题(农码主观意识太强被坑了)