IIS发布.Net 5 web api以及问题解决
NET 5.0是3.1之后的.NET Core的下一个主要版本,但是不会替换.net framework
近日在尝试.net 5 web api项目在iis的发布,遇到了一些问题,以及总结一下问题的处理思路。
首先安装最新版本的vs 2019,我的是16.8.4版本,已经将.net 5包含进来。
我们可以从下图看出来,未来net 5将占据很重要的位置,.NET 5 将基于 .NET Core 和 Mono 的最佳实践构建出一个平台,用于所有现代 .NET 平台的开发。
有关.Net 5 的介绍可以看微软的介绍:https://devblogs.microsoft.com/dotnet/introducing-net-5/
言归正传,我们要开始 .Net 5 web api 项目的实践。
一、开发环境配置
.net 5 sdk(可以单独安装,也可以更新到vs 2019 最新 版本),Visual studio 2019
.NET Core Hosting Bundle(IIS托管捆绑包) ,捆绑包可安装 .NET Core 运行时、.NET Core 库和 ASP.NET Core 模块。 该模块允许 ASP.NET Core 应用在 IIS 后面运行。
安装成功后,打开下图的模块,我们会看到Asp.NetCoreModuleV2模块已经存在。
二、创建web api 项目
如果你已经熟悉,请忽略一下步骤
我们直接新建ASP.Net Core Web应用程序,下一步
起项目名称,然后点击创建按钮
然后再下图做如下选择
创建完的项目结构如下。
需要注意的是,项目默认是没有生成WebBaseApi.xml文件的,需要进行单独设置,双击项目中Properties>调试功能,如下图所示,勾选XML文件
创建完项目,我们直接运行看看,很顺利,项目打开了,如下图所示,.Net 5 web api 是默认集成swagger的,不需要我们在单独设置了。
从项目中我们可以看到默认加载了Nuget包Swashbuckle.AspNetCore。
Startup累里面的也加了相应配置。注意代码中红色部分,是swagger设置,第一个默认网站打开swagger 页面
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "我的web api 3.1 接口", Version = "v1", Description = "我的swagger接口说明" }); }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseSwagger(); //app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApi3.1 v1"));
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint($"{virtualPath}/swagger/v1/swagger.json", "LRSMESX V1");
c.RoutePrefix = string.Empty;//设置根节点访问
c.DefaultModelExpandDepth(-1);
c.DisplayRequestDuration();
c.DocumentTitle = "龙软安全生产共享开发平台";
c.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None);
});
app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
目前项目已经创建,并运行成功,接下来就是发布iis
将项目直接发布,并在IIS中创建站点,这个过程我这里省略了,需要注意的是,这里我们需要设置一下对应的应用池,.Net CLR版本选择无托管代码。
需要注意:我们需要从项目中拷贝对应的xml文件(上面生成的)到发布地址,即可预览成功。