C#开发WPF自宿主web服务

一直都在使用IIS部署WebAPI的模式,经过讨论决定不适用IIS,创建自宿主程序启动AP

使用微软自带OWIN来实现自承载Web Api框架,集成了swagger接口文档

话不多说,详细如下:

大致的项目框架结构:

使用NuGet安装以下几个包:

	<package id="Beginor.Owin.StaticFile" version="0.3.1" targetFramework="net48" />
	<package id="Microsoft.AspNet.Cors" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.Client" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.Core" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.SelfHost" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNetCore.Http.Features" version="5.0.17" targetFramework="net48" />
	<package id="Microsoft.Extensions.Primitives" version="7.0.0" targetFramework="net48" />
	<package id="Microsoft.Owin" version="4.2.2" targetFramework="net48" />
	<package id="Microsoft.Owin.Cors" version="4.2.2" targetFramework="net48" />
	<package id="Microsoft.Owin.Host.HttpListener" version="4.2.2" targetFramework="net48" />
	<package id="Microsoft.Owin.Hosting" version="4.2.2" targetFramework="net48" />
	<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
	<package id="Owin" version="1.0" targetFramework="net48" />
	<package id="SqlSugar" version="5.1.4.70" targetFramework="net48" />
	<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
	<package id="System.IO.Pipelines" version="7.0.0" targetFramework="net48" />
	<package id="System.Memory" version="4.5.5" targetFramework="net48" />
	<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
	<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
	<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />

在宿主服务创建RouteConfig类,注:集成了Swagger 大伙在配置的时候注意

public class RouteConfig
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            HttpConfiguration config = new HttpConfiguration();
            config.MapHttpAttributeRoutes();
            //跨域配置,经测试有效
            config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
            config.Routes.MapHttpRoute(name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { cotroller = "home", action = RouteParameter.Optional, id = RouteParameter.Optional });
            config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
            //异常拦截器
            //config.Filters.Add(new ExceptionFilter());
            方法拦截器
            //config.Filters.Add(new ActionFilter());
            SwaggerConfig.Register(config);
            appBuilder.UseWebApi(config);
        }
    }

 再创建一个启动服务类ServerStartup

public static class ServerStartup
    {
        private static IDisposable selfHost;
        public static void ServerStart()
        {
            if (selfHost == null)
            {
                var port = 8010;
                StartOptions options = new StartOptions();
                options.Urls.Add("http://localhost:" + port);
                selfHost = WebApp.Start<RouteConfig>(options);
            }
        }
        public static void Shutdown()
        {
            selfHost?.Dispose();
        }
    }

创建一个Controllers文件加里面加入TestController

他会自动继承apiContrller,定义几个常见的方法(请求)

方法可以有重载,方法体里面和C#代码差不多,原来怎么写还怎么写

swagger的配置这个我这菜鸟就不搞了  csdn上面大把大佬写的明明白白

嘿嘿,  直接在wpf应用项目中调用启动

调用设定的端口:http://localhost:8010/swagger/ui/index

接口文档就打开了

然而只是这样吗?nonono,神奇的事情即将发生。把vs关了,在bin文件中找到wpf应用执行exe文件,点击执行

api接口文档照样可以显示,接口调用正常,66666,感觉还行

 擦~这这iis网站就这么不需要部署了?

 

 

源码奉上,需要的老铁自己去下载 

来造作吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值