webapi 使用windwos服务做宿主

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.测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值