文章目录
前言
为何要写这篇文章?
最初是一个很常规的WebApiece项目基于 .net framework 4.7.2, 调试时部署在本地IIS
测试完成后需要部署到服务器上, 不想再配IIS(由于之前有多个.netcore项目都是托管在Windows服务中), 多以就找找了相关的资料,决定使用相似的方式来改造以下.
二、使用步骤
1. 创建项目
添加一个基于Framework 4.7.2的控制台应用
2. 添加相关的 Nuget
- Autofac.WebApi2
- AutoMapper
- log4net
- Microsoft.AspNet.WebApi.Client
- Microsoft.AspNet.WebApi.OwinSelfHost
- Swashbuckle
3. 添加控制器
添加项目文件夹 Controllers
添加一个控制器, 代码如下
[RoutePrefix("api/consumer")]
public class ConsumerController : ApiControllerBase
{
private readonly ILog _log;
/// <summary>
/// 实例化一个<see cref="ConsumerController"/>对象
/// </summary>
public ConsumerController(ILog log) // 使用autofac作为依赖注入容器,集成方式后面会有介绍
{
_log = log ?? throw new ArgumentNullException(nameof(log));
}
[HttpPost]
[Route("create")]
public async Task<IHttpActionResult> CreateConsumerAsync([FromBody] ConsumerInfoCreateDto consumer)
{
// 这里有用到 AutoMapper, 集成方式后面会有介绍
try
{
....
return Ok();
}
catch (Exception ex)
{
_log.Error("consumer-create", ex);
return BadRequest(ex.InnerException == null ? ex.Message : ex.InnerException.Message);
}
}
}
4. 添加一个 Setup 类
代码如下(示例):
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
// Web API 路由
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {
id = RouteParameter.Optional }
);
appBuilder