23
GitHub - davidfowl/FeatherHttp
source link: https://github.com/davidfowl/FeatherHttp
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
Feather HTTP
A super lightweight low ceremony APIs for ASP.NET Core applications.
- Built on the same primitives as ASP.NET Core
- Optimized for building HTTP APIs quickly
- Take advantage of existing ASP.NET Core middleware and frameworks
Hello World
using FeatherHttp; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting; using Microsoft.AspNetCore.Http; class Program { static async Task Main(string[] args) { var builder = WebApplicationHost.CreateDefaultBuilder(args); builder.UseUrls("http://localhost:3000"); var app = builder.Build(); app.MapGet("/", async context => { await context.Response.WriteAsync("Hello World"); }); await app.RunAsync(); } }
ASP.NET Core Controllers
using FeatherHttp; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Mvc; public class HomeController { [HttpGet("/")] public string HelloWorld() => "Hello World"; } class Program { static async Task Main(string[] args) { var builder = WebApplicationHost.CreateDefaultBuilder(args); builder.UseUrls("http://localhost:3000"); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); await app.RunAsync(); } }
Carter
using FeatherHttp; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; using Carter; public class HomeModule : CarterModule { public HomeModule() { Get("/", async (req, res) => await res.WriteAsync("Hello from Carter!")); } } class Program { static async Task Main(string[] args) { var builder = WebApplicationHost.CreateDefaultBuilder(args); builder.UseUrls("http://localhost:3000"); builder.Services.AddCarter(); var app = builder.Build(); app.MapCarter(); await app.RunAsync(); } }
SignalR
using FeatherHttp; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.SignalR; class Chat : Hub { public Task Send(string message) => Clients.All.SendAsync("Send", message); } class Program { static async Task Main(string[] args) { var builder = WebApplicationHost.CreateDefaultBuilder(args); builder.UseUrls("http://localhost:3000"); builder.Services.AddSignalR(); var app = builder.Build(); app.MapHub<Chat>("/chat"); await app.RunAsync(); } }
GRPC
using FeatherHttp; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.DependencyInjection; using Grpc.Core; using Greet; public class GreeterService : Greeter.GreeterBase { public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context) { return Task.FromResult(new HelloReply { Message = "Hello " + request.Name }); } } class Program { static async Task Main(string[] args) { var builder = WebApplicationHost.CreateDefaultBuilder(args); builder.UseUrls("https://localhost:3000"); builder.Services.AddGrpc(); var host = builder.Build(); app.MapGrpcService<GreeterService>(); await app.RunAsync(); } }
Uber Example
- Serilog for logging
- Autofac for DI
- Yaml configuration provider
using System.Threading.Tasks; using Autofac.Extensions.DependencyInjection; using FeatherHttp; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Serilog; class Program { static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() .Enrich.FromLogContext() .WriteTo.Console() .CreateLogger(); var builder = WebApplicationHost.CreateDefaultBuilder(args); builder.Configuration.AddYamlFile("appsettings.yml", optional: true); builder.UseSerilog(); builder.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.UseUrls("http://localhost:3000"); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.MapGet("/", async context => { await context.Response.WriteAsync("Hello World"); }); await app.RunAsync(); } }
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK