1.需要引用的包
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.15" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.9" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.9" targetFramework="net45" />
<package id="Microsoft.Owin" version="4.2.2" targetFramework="net45" />
<package id="Microsoft.Owin.Host.HttpListener" version="4.2.2" targetFramework="net45" />
<package id="Microsoft.Owin.Hosting" version="4.2.2" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
</packages>
2.新建windows服务项目
过程略...
3.新增JsonContentNegotiator类
/*
* --------------------------------------------------
* Namespace : **.webApi
* Author : song
* CreateTime : 2022/10/9 17:18:51
* Remark :
* --------------------------------------------------
*/
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Net.Http.Headers;
namespace ChaseWinServer.webApi
{
public class JsonContentNegotiator: IContentNegotiator
{
private readonly JsonMediaTypeFormatter _jsonFormatter;
public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
{
_jsonFormatter = formatter;
}
public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
{
var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
return result;
}
}
}
4.新增RegisterRoutesStartup类
/*
* --------------------------------------------------
* Namespace : ChaseWinServer.webApi
* Author : song
* CreateTime : 2022/10/9 17:16:51
* Remark :
* --------------------------------------------------
*/
using System;
using System.Net.Http.Formatting;
using System.Web.Http;
using log4net;
using Owin;
namespace ChaseWinServer.webApi
{
public class RegisterRoutesStartup
{
private static ILog log = log4net.LogManager.GetLogger(typeof(RegisterRoutesStartup));
public void Configuration(IAppBuilder appBuilder)
{
try
{
HttpConfiguration config = new HttpConfiguration();
//自定义路由
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//只响应Json请求
var jsonFormatter = new JsonMediaTypeFormatter();
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
appBuilder.UseWebApi(config);
}
catch (Exception e)
{
log.Error(e.ToString());
}
}
}
}
5.构建宿主代理
private IDisposable hostObject;
protected override void OnStart(string[] args)
{
try
{
hostObject = WebApp.Start<RegisterRoutesStartup>("http://localhost:6688");
}
catch (Exception ex)
{
log.Error(ex.ToString());
}
}
protected override void OnStop()
{
hostObject.Dispose();
}
6.新建Controller
/*
* --------------------------------------------------
* Namespace : ChaseWinServer
* Author : song
* CreateTime : 2022/10/9 16:54:20
* Remark :
* --------------------------------------------------
*/
using log4net;
using System.Web.Http;
namespace ChaseWinServer
{
public class TestController : ApiController
{
[HttpGet]
public string Add()
{
return "你好";
}
}
}
7. 启动服务
8.测试