控制器定义
组件定义控制器没有特别的规则,只需在类上添加[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); } } }; } }
访问Beetlex的Github

浙公网安备 33010602011771号