前言
为了方便开发轻量级WebApi服务,作者早在 .NET Framework 4.5 的时候就提供了 UniversalFrame。但是因为.NET Framework Web 需要在iis上搭建,并不能达到轻量级的运行,于是转移战场到了 .NET Core 至此达到了高效轻量。
示例
为了更好的让大家理解,我已经提供了一个 Git 仓库,上面有一份代码,方便大家理解。
项目地址: https://github.com/ni-xue/UniversalFrame
下面是相关代码:
Startup类下面注册。
前面我们使用了两种方式,本别都能实现api的效果。接下来我们来说一下相关支持和服务。
public void ConfigureServices(IServiceCollection services)
{
services.AddAshx(o => o.IsAsync = true)//先添加服务。
.AddHttpContext();//注册静态方式的HttpContext对象获取。
//大家看见这个AddHttpContext 就有点懵逼了,不知道他是干嘛的,这里作者接受一下,他等同于
//services.AddHttpContextAccessor(); 这一句,但是为啥不直接用这一句了? 因为使用
//AddHttpContext 可以同步内部实现:HttpContextExtension.Current 或 HttpContextExtension.Accessor
//Current 这个关键字应该很熟些,这就是Framework 下面的 HttpContext.Current 对象。
//Accessor = 等于 IHttpContextAccessor 该接口。
services.AddObject(任何变量);// 用于注册类型值,实现服务获取。
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
var 任何变量 = app.GetService(任何变量);//取值。
}
在控制器中获取服务
public class RiskController : Controller
{
var readonly 类型 任何变量;
public RiskController(类型 任何变量)
{
this.任何变量 = 任何变量;
}
}
在 MinApi 或 ApiAshx Api 获取服务
public class Servers : ApiAshx
{
public void Get() //正常实现
{
对象 dx = Context.GetService<对象>();//这是获取服务的一种方式,扩展支持。
Json(new { msg = "暂无数据。", code = 200 });
}
public async Task GetAsync() //异步实现
{
await JsonAsync(new { msg = "暂无数据。", code = 200 });
}
}
public class Servers : MinApi
{
//这里的这个对象,只有是api的第一个参数才会生效,否则无效。
public IApiOut Get(HttpContext Context)
{
对象 dx = Context.GetService<对象>();//这是获取服务的一种方式,扩展支持。
return ApiOut.Json(new { msg = "暂无数据。", code = 200 });
}
public async Task<IApiOut> GetAsync(HttpContext Context) //一样可以
{
return await ApiOut.JsonAsyn(new { msg = "暂无数据。", code = 200 });
}
}