栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

50、Windows服务中对外提供Web Api接口

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

50、Windows服务中对外提供Web Api接口

引入依赖

在通过Nuget包管理器安装如下组件

   Microsoft.AspNet.WebApi.Owin

   Microsoft.Owin.Hosting   

   Microsoft.Owin.Host.HttpListener

                                                                                                                               

1、创建 JsonContentNegotiator 类

    class JsonContentNegotiator : IContentNegotiator
    {
        private readonly JsonMediaTypeFormatter jsonMediaTypeFormatter;

        public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
        {
            this.jsonMediaTypeFormatter = formatter;
        }

        public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable formatters)
        {
            var result = new ContentNegotiationResult(this.jsonMediaTypeFormatter, new MediaTypeHeaderValue("application/json"));
            return result;
        }
    }

2、创建 RegisterRoutesStartup 类

    class RegisterRoutesStartup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            HttpConfiguration config = new HttpConfiguration();
            //自定义路由
            config.Routes.MapHttpRoute(
              name: "DefaultApi",
              routeTemplate: "socketApi/{controller}/{action}/{id}",
              defaults: new { id = RouteParameter.Optional }
            );
            //只响应Json请求
            var jsonFormatter = new JsonMediaTypeFormatter();
            config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
            appBuilder.UseWebApi(config);
        }
    }

3、在服务(Service1)中启动WebApi

    public partial class Service1 : ServiceBase
    {
        private string hostSocket;
        private IDisposable hostObject;

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            hostSocket = Const.GetIpAddress();

            hostObject = WebApp.Start("http://" + hostSocket + ":" + Const.GetAppSetting("portObject"));

        }

        protected override void OnStop()
        {
            hostObject.Dispose();
        }
    }

4、创建 Const 类

    public class Const
    {
        public static string GetAppSetting(string key)
        {
            foreach(string item in ConfigurationManager.AppSettings)
            {
                if(key == item)
                {
                    return ConfigurationManager.AppSettings[item];
                }
            }
            return "";
        }

        public static string GetIpAddress()
        {
            string ip = string.Empty;
            foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
            {
                if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                {
                    if ("127.0.0.1" == _IPAddress.ToString())
                    {
                        continue;
                    }
                    else
                    {
                        ip = _IPAddress.ToString();
                        break;
                    }
                }
            }
            return ip;
        }

    }

5、最后创建 WebApi 类

    public class DemoController : ApiController
    {
        /// 
        /// 访问 http://host:port/socketApi/Demo/Test
        /// 
        /// 
        [HttpGet]
        public string Test()
        {
            return "Are you ok?";
        }
    }

 

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/908998.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号