-
-
Notifications
You must be signed in to change notification settings - Fork 175
控制器定义
Henry edited this page Sep 10, 2019
·
1 revision
组件定义控制器没有特别的规则,只需在类上添加[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);
}
}
};
}
}