# Lails.Server **Repository Path**: Lails/Lails.Server ## Basic Information - **Project Name**: Lails.Server - **Description**: 基于开源产品【ASP.NET WebAPI+TopShelf+NLog】实现的跨平台,自宿主运行的服务端框架。 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 50 - **Forks**: 20 - **Created**: 2018-01-07 - **Last Updated**: 2025-08-26 ## Categories & Tags **Categories**: webframework **Tags**: None ## README ### 《Lails系列产品》 * [Lails.Server](https://gitee.com/Lails/Lails.Server): Web服务框架 * [Lails.Config](https://gitee.com/Lails/Lails.Config): 简易配置服务框架 * [Lails.MQClient](https://gitee.com/Lails/Lails.MQClient): 消息队列SDK --- ### 一、介绍 基于开源产品【ASP.NET WebAPI+TopShelf+NLog】实现的跨平台,自宿主运行的服务端框架。主要实现: * Windows服务模式运行 * 开发WebAPI服务 * 标准日志 * 多级配置文件 > Git:https://gitee.com/xiaosonl/Lails.Server > Nuget:nuget.lails.cc/nuget ### 二、安装 新建控制台程序项目,用Nuget引用Lails.WebAPI包。 ```bash Install-Package Lails.Server ``` 引用后生成的项目文件结构如下: ![](images/screenshot_1515332857040.png) 其中: * config.json : 配置文件,默认只有“HttpPort”值,即Http服务监听的端口号 * DemoAPI.cs:WebAPI的示例文件 * NlLog.config : NLog配置文件 ### 三、使用说明 #### 1. 编写服务内容 ```C# AppServer.Run(AppConfig.Default, () => { AppLogger.Info("Server Start."); }, () => { AppLogger.Info("Server Stop."); }); ``` #### 2. 安装/启动服务 ```bash #安装服务 {app}.exe install #卸载服务 {app}.exe uninstall #启动服务 {app}.exe start #停止服务 {app}.exe stop ``` ### 四、示例 #### 1. WebAPI服务 ```C# /// /// DemoAPI /// [WebApiResult] public class DemoAPIController : ApiController { /// /// 获取数据 /// /// 数据 public string GetData() { return "Lails.Server"; } /// /// 获取对象 /// /// 对象ID /// DemoModel对象 public DemoModel GetModel(long id) { return new DemoModel() { ID = id, Value = "Value" }; } /// /// 获取对象返回异常结果 /// /// 对象ID /// DemoModel对象 public DemoModel GetModelOnException(long id) { throw new CustomException(-1, "无此ID对象", null); } } /// /// DemoModel对象 /// public class DemoModel { /// /// 对象ID /// public long ID { get; set; } /// /// 对象值 /// public string Value { get; set; } } /// /// 自定义异常 /// public class CustomException : Exception { public CustomException(int code, string message, Exception ex) : base(message, ex) { this.HResult = code; } } ``` 创建的API服务支持通过Swagger浏览,默认地址为: [http://localhost:7777/Swagger](http://localhost:7777/Swagger) #### 2. 配置文件 默认的配置文件config.json内容如下: ```json { "HttpPort": 7777 } ``` 自定义配置可直接修改该文件,如: ```json { "HttpPort": 7777, "DB": "mysql" } ``` 在代码中使用该配置时,需要创建新的配置类,如下: ```C# public class Config : AppConfig { public string DB { get; set; } } ..... Config config = AppConfig.Load(); ``` --- ### 版本记录 #### V0.2.0.0 1. 引用Nuget包时,支持创建配置文件和示例,且默认总是复制到程序目录。 #### V0.2.2.0 1. 加入Swagger文档功能,可通过/Swagger地址访问。 #### V0.2.2.1 1. 修改NLog配置文件,支持同时输出到文件和控制台。 #### V0.2.3.0 1. 支持生成自动服务安装脚本文件 #### V0.2.3.2 1. 加入服务异常捕获和记录; #### V0.2.3.3 1. 对主进程进行全局异常处理和记录; #### V0.2.3.4 1. 支持对服务名称加入前缀; #### V0.2.4.0 1. 新增WebApiResultAttribute的自定义ActionFilter,支持返回标准的输出格式: ```json { "Code": 0, "Result": { ID: 1, Name: 'name' }, "Message": "" } ``` 对于API出抛出的异常,也会自动捕获并获取异常Code(取值于Exception中的HResult值)及异常信息输: ```json { "Code": -1, "Result": null, "Message": "无此ID对象" } ``` #### V0.2.5.0 新增Autofac注入 ```C# //注入 AutofacConfig.Builder.RegisterType(typeof(Logger)).SingleInstance(); ``` #### V0.4.0.0 新增扩展Controller中header取值 #### V0.4.1.1 调试模式下给Swagger附加参数 ``` SwaggerAttachParams.Add("appId","header"); ``` #### V0.4.1.2 支持接口别名 ```[HttpGet] [AliasMethod("x.x.x.x")] public void Get(string value) { } 访问方式1:http://127.0.0.1:7777/DemoAPI/Get 访问方式2:http://127.0.0.1:7777/DemoAPI/x.x.x.x ``` 支持上下文OwinContext ``` 例:string appid = OwinContext.Current.Request.Headers.Get("appId"); ``` #### V0.4.1.3 支持跨域Credentials 支持新增过滤器 ```SwaggerAttachParams.Add("appId","header");``` 全局异常捕获处理 服务异常自动恢复启动