控制器定义
组件定义控制器没有特别的规则,只需在类上添加[Controller]
描述,组件在加载的时候就会解释相关方法
定义
[Controller] public class Home { /// <summary> /// Hello Word /// </summary> /// <param name="name">string: you name</param> /// <returns>string</returns> public object Hello(string name) { return new { Hello = "hello " + name, Time = DateTime.Now }; } }
默认控制器对应的根路径是/
,如果需要指定根路径可以通过BaseUrl
属性指定
指定根路径
[Controller(BaseUrl = "/admin/blog")]
针对该控制器下的所有访问方式路径是/admin/blog/xxxx
实例方式
默认情况下控制器都是单实例的,如果希望控制器每次请求都不同实例,可以通过SingleInstance
属性来设置
[Controller(SingleInstance =false)]
排除方法
组件默认情况下是把所有public
的方法都映射到Url
上,如果希望某些方法不想提供Url
访问,可以给方法打上以下属性
[NotAction] public void Init(HttpApiServer server, string path);
异步方法
组件支持通过async/await的方法来支持异步方法的定义,定义如下:
public async Task<TextResult> TestTask(IHttpContext context) { var result = new TextResult("Hello, World!"); await Task.Delay(1000); return result; }
方法限流
组件支持对方法进行一个限流设置,配置如下:
[RequestMaxRPS(100)] public Employee EmployeeGet(int id) { Employee result = DataHelper.Defalut.Employees.Find(e => e.EmployeeID == id); if (result == null) result = new Employee(); return result; }
以上配置最大的RPS
是100
定义初始化方法
有些时候需要在控制器加载前需要初始化,这个时候只需要实现一个接口,组件在加载控制器的时候就会执行对应接口的方法
[Controller] public class Rewrite : IController { [NotAction] public void Init(HttpApiServer server, string path) { server.Options.StaticResurceCacheTime = 60 * 5; server.UrlRewrite.Add("/cate/{0}.html", "/index.html", "html") .Add("/search/{0}.html", "/index.html", "html") .Add("/tag/{0}.html", "/index.html", "html") .Add("/blog/{0}.html", "/blog.html", "html") .Add("/photos/{0}.html", "/photos.html", "html"); server.HttpRequestNotfound += (o, e) => { e.Cancel = true; e.Response.Result(new Move302Result("/product.html")); }; server.ResourceCenter.FileResponse += (request, e) => { if (e.Request.Ext == "jpg" || e.Request.Ext == "png") { if (!server.Options.Debug) { int time = 600000; if (Regex.IsMatch(e.Request.BaseUrl, @"/images/\d+/.*")) { time = time * 1000; } e.Response.Header.Add(HeaderTypeFactory.CACHE_CONTROL, "public, max-age=" + time); } } }; } }
【推荐】国内首个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存储压测的问题(农码主观意识太强被坑了)