# 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
```
引用后生成的项目文件结构如下:

其中:
* 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");```
全局异常捕获处理
服务异常自动恢复启动