一直都在使用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网站就这么不需要部署了?
源码奉上,需要的老铁自己去下载
来造作吧