Fasthttpapi is a lightweight and high-performance HTTP service component in the dotnet core platform that supports WebSocket and SSL! Performance higher than ap.net web api 200%
Install-Package BeetleX.FastHttpApi
<ServerGarbageCollection>true</ServerGarbageCollection>
[Controller]
class Program
{
private static BeetleX.FastHttpApi.HttpApiServer mApiServer;
static void Main(string[] args)
{
mApiServer = new BeetleX.FastHttpApi.HttpApiServer();
mApiServer.Debug();
mApiServer.Register(typeof(Program).Assembly);
mApiServer.Open();
Console.Write(mApiServer.BaseServer);
Console.Read();
}
// Get /hello?name=henry
// or
// Get /hello/henry
[Get("{name}")]
public object Hello(string name)
{
return $"hello {name} {DateTime.Now}";
}
// Get /GetTime
public object GetTime()
{
return DateTime.Now;
}
}- HttpConfig.json
"SSL": true,
"CertificateFile": "you.com.pfx",
"CertificatePassword": "******",
- Code
mApiServer.ServerConfig.SSL=true;
mApiServer.ServerConfig.CertificateFile="you.com.pfx";
mApiServer.ServerConfig.CertificatePassword="******";- Text result
public class TextResult : ResultBase
{
public TextResult(string text)
{
Text = text == null ? "" : text;
}
public string Text { get; set; }
public override bool HasBody => true;
public override void Write(PipeStream stream, HttpResponse response)
{
stream.Write(Text);
}
}- Using
public object plaintext()
{
return new TextResult("Hello, World!");
} public object SetCookie(string name, string value, IHttpContext context)
{
Console.WriteLine(context.Data);
context.Response.SetCookie(name, value);
return $"{DateTime.Now}{name}={value}";
}
public string GetCookie(string name, IHttpContext context)
{
Console.WriteLine(context.Data);
return $"{DateTime.Now} {name}= {context.Request.Cookies[name]}";
} public void SetHeader(string token,IHttpContext context)
{
context.Response.Header["Token"]=token;
}
public string GetHeader(string name, IHttpContext context)
{
return context.Request.Header[name];
}- url
/hello?name=xxxor/hello/henry
[Get(Route = "{name}")]
public object Hello(string name, IHttpContext context)
{
return $"hello {name} {DateTime.Now}";
}/SetValue?id=xxx&value=xxxxor/SetValue/xxx-xxx
[Get(Route = "{id}-{value}")]
public object SetValue(string id, string value, IHttpContext context)
{
return $"{id}={value} {DateTime.Now}";
}- Json
{"name":"xxxx","value":"xxx"}
[Post]
[JsonDataConvert]
public object Post(string name, string value, IHttpContext context)
{
Console.WriteLine(context.Data);
return $"{name}={value}";
}or
[Post]
[JsonDataConvert]
public object Post(Property body, IHttpContext context)
{
Console.WriteLine(context.Data);
return $"{body.name}={body.value}";
}- x-www-form-urlencoded
name=aaa&value=aaa
[Post]
[FormUrlDataConvert]
public object PostForm(string name, string value, IHttpContext context)
{
Console.WriteLine(context.Data);
return $"{name}={value}";
}- multipart/form-data
[Post]
[MultiDataConvert]
public object UploadFile(string remark, IHttpContext context)
{
foreach (var file in context.Request.Files)
using (System.IO.Stream stream = System.IO.File.Create(file.FileName))
{
file.Data.CopyTo(stream);
}
return $"{DateTime.Now} {remark} {string.Join(",", (from fs in context.Request.Files select fs.FileName).ToArray())}";
}- Read stream
[Post]
[NoDataConvert]
public object PostStream(IHttpContext context)
{
Console.WriteLine(context.Data);
string value = context.Request.Stream.ReadString(context.Request.Length);
return value;
}- custom filter
public class GlobalFilter : FilterAttribute
{
public override bool Executing(ActionContext context)
{
Console.WriteLine(DateTime.Now + " globalFilter execting...");
return base.Executing(context);
}
public override void Executed(ActionContext context)
{
base.Executed(context);
Console.WriteLine(DateTime.Now + " globalFilter executed");
}
}- using
[CustomFilter]
public string Hello(string name)
{
return DateTime.Now + " hello " + name;
}or
[Controller]
[CustomFilter]
public class ControllerTest
{
}- skip filter
[SkipFilter(typeof(GlobalFilter))]
public string Hello(string name)
{
return DateTime.Now + " hello " + name;
} [Get(Route = "{name}")]
public Task<String> Hello(string name)
{
string result = $"hello {name} {DateTime.Now}";
return Task.FromResult(result);
}
public async Task<String> Wait()
{
await Task.Delay(2000);
return $"{DateTime.Now}";
} [Options(AllowOrigin = "www.ikende.com")]
public string GetTime(IHttpContext context)
{
return DateTime.Now.ToShortDateString();
}- server
[Controller]
class Program
{
private static BeetleX.FastHttpApi.HttpApiServer mApiServer;
static void Main(string[] args)
{
mApiServer = new BeetleX.FastHttpApi.HttpApiServer();
mApiServer.Debug();
mApiServer.Register(typeof(Program).Assembly);
mApiServer.Open();
Console.Write(mApiServer.BaseServer);
Console.Read();
}
// Get /hello?name=henry
// or
// Get /hello/henry
[Get("{name}")]
public object Hello(string name)
{
return $"hello {name} {DateTime.Now}";
}
// Get /GetTime
public object GetTime()
{
return DateTime.Now;
}
}- Hello
send json
{
url: '/Hello',
params: { name: 'test' }
}- GetTime
send json
{
url: '/GetTime',
params: { }
}