站酷魔方网站建设中,外贸品牌推广公司,法学院网站建设建议,做航模的网站大家好#xff0c;我是等天黑。FastEndpoints 是一个基于 .NET 6 开发的开源 webapi 框架#xff0c;它可以很好地替代 .NET Minimal APIs 和 MVC #xff0c;专门为开发效率而生#xff0c;带来了全新的开发模式和编码体验。另外对于 .NET 的中间件、认证、授权、日志我是等天黑。FastEndpoints 是一个基于 .NET 6 开发的开源 webapi 框架它可以很好地替代 .NET Minimal APIs 和 MVC 专门为开发效率而生带来了全新的开发模式和编码体验。另外对于 .NET 的中间件、认证、授权、日志依赖注入这些也都是支持的甚至有些还进行了加强所以你很快就可以上手它。 小试牛刀 接下来我将用 FastEndpoints 创建一个 webapi 应用展示它是如何使用的真的非常简单。创建一个新项目dotnet new web -n MyWebApp进入项目cd MyWebApp安装 Nuget 包dotnet add package FastEndpoints更新 Program.csglobal using FastEndpoints;var builder WebApplication.CreateBuilder();
builder.Services.AddFastEndpoints();var app builder.Build();
app.UseAuthorization();
app.UseFastEndpoints();
app.Run();添加一个 Request DTOpublic class MyRequest
{public int Age { get; set; }public string Name { get; set; }
}添加一个 Response DTOpublic class MyResponse
{public int Id { get; set; }public int Age { get; set; }public string Name { get; set; }public DateTime CreateTime { get; set; }
}添加一个 Endpoint Class然后添加下面的代码 这是处理业务逻辑的地方public class MyEndpoint : EndpointMyRequest
{public override void Configure(){Post(/api/user/create);AllowAnonymous();}public override async Task HandleAsync(MyRequest req, CancellationToken ct){var response new MyResponse(){Id 1,Age req.Age,Name req.Name,CreateTime DateTime.Now };await SendAsync(response);}
}准备工作都好了直接启动我们的 webapi 项目。然后用 Postman 或者其他工具向 /api/user/create 端点发送 POST 请求。创建了一个用户并返回了用户信息就是这么简洁这就是 FastEndpoints。你可能注意到了上面的 Configure方法指定了 Http 动词和端点。当然你也可以使用 .NET 原生的特性的方式这也是支持的。[HttpPost(/my-endpoint)]
[Authorize(Roles Admin,Manager)]
public class UpdateAddress : EndpointMyRequest, MyResponse
{public override async Task HandleAsync(MyRequest req, CancellationToken ct){await SendAsync(new MyResponse { });}
} 依赖注入 在 FastEndpoints 中可以使用三种方式来访问 IOC 容器中注册的服务。假设我们有一个 HelloWorldService 。public interface IHelloWorldService
{string SayHello();
}public class HelloWorldService : IHelloWorldService
{public string SayHello() hello world!;
}并且注册到 IOC 容器中。builder.Services.AddScopedIHelloWorldService, HelloWorldService();1. 构造函数注入这是我们最熟悉的也是使用最多的方式。public class MyEndpoint : EndpointWithoutRequest
{private IHelloWorldService _helloService;public MyEndpoint(IHelloWorldService helloScv){_helloService helloScv;}public override void Configure(){Get(/api/hello-world);}public override async Task HandleAsync(CancellationToken ct){await SendAsync(_helloService.SayHello());}
}2. 属性注入服务实例可以通过属性的方式进行自动注入。public class MyEndpoint : EndpointWithoutRequest
{public IHelloWorldService HelloService { get; set; }public override void Configure(){Get(/api/hello-world);}public override async Task HandleAsync(CancellationToken ct){await SendAsync(HelloService.SayHello());}
}3. 手动解析也可以像下面这样直接手动获取服务。使用 TryResolve 或 Resolve() 方法。public override async Task HandleAsync(CancellationToken ct)
{IHelloWorldService? helloSvc TryResolveIHelloWorldService();if (helloSvc is null)ThrowError(service not resolved!);var logger ResolveILoggerMyEndpoint();logger.LogInformation(hello service is resolved...);await SendAsync(helloSvc.SayHello());
}预先解析的服务下面的三个服务已经预先解析过我们可以直接在处理程序中使用。property: Config
service : IConfigurationproperty: Env
service : IWebHostEnvironmentproperty: Logger
service : ILogger非常方便地使用它们。public override async Task HandleAsync(CancellationToken ct)
{Logger.LogInformation(this is a log message);var isProduction Env.IsProduction();var smtpServer Config[SMTP:HostName];...
} 架构模式 如果你写过 Go Web你会发现这是何等的相似。package mainimport (fmtnet/http
)func main() {http.HandleFunc(/, func(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, Hello, youve requested: %s\n, r.URL.Path)})http.ListenAndServe(:80, nil)
}FastEndpoints 遵循了 REPR 设计 Request-Endpoint-Response这和我们常说的 MVC 模式是不一样的。思考一下如果后端只是一个 webapi 应用没有 View 那它就变成了 MC 架构 。是不是很奇怪那为什么不用 REPR 模式呢从另外一个角度上说“分层架构” 是我们很熟悉和经常使用的代码被分成不同的层。这样的好处也是显而易见的。它们以解耦的方式组合在一起在需要时我们可以很方便的替换其中的层。还有一种架构称为 “垂直切片架构, 系统的每个组件都是单独的一块彼此并不影响就像微服务那样。而 FastEndpoints 正是使用了下面的 “垂直切片架构。 总结 如您所见FastEndpoints 是一个灵活高效的 webapi 框架。另外它还有其他的功能比如异常处理集成和单元测试限流API 版本控制等等。希望对您有用文档: https://fast-endpoints.com/Github: https://github.com/FastEndpointsEND