.net core创建webapi之------部署发布项目,接口文档swagger配置,跨域访问问题的解决

将webapi发布到服务器上常用有两种方式,一种IIS发布,一种是直接运行exe。

推荐使用IIS发布,这样直接服务开启,是常用方式。

一,先讲一下直接运行exe方式发布的,这种方式好处是无需安装任何环境,直接将.net core的环境支持生成在目录中,将生成目录拷贝到服务器之后直接打开exe文件即可访问接口。

1,点击项目右键--》发布

 

 

 

 

 

 2,点击新建--文件--高级-----进行设置

 

 

 

根据安装服务器上的系统进行选择,发布之后把发布文件拷贝到服务器上面,然后双击.exe文件运行即可,文件夹大概是这样:

 

 

 

独立生成的文件夹文件很庞大,一般部署与发布不采用这种方式。

下面重点讲第二种IIS发布方式。

1,在服务器上安装.net core 的运行环境,去微软官网下载运行环境,网址是:https://dotnet.microsoft.com/download/dotnet-core/3.1

 

 

 如果是服务器安装的是windowserver,记得选择最后一个下载。

然后在服务器上安装运行环境

2,发布文件夹,这里选择如下图方式发布

 

 

 

3,发布完成之后将发布的文件夹拷入,发布到IIS上,发布完成后点击模块设置为无托管代码

 

 

 

 

 

 设置完成后就可以直接访问接口了,如果还不能访问出现错误则看环境是否安装成功,如果运行环境安装成功在IIS里双击模块可以看到这个

 

 

 如果没有这个需要重新安装。部署中遇到问题可参考:https://www.cnblogs.com/LYF1997/p/11507747.html写的非常详细,部署时候给我了很多帮助。

现在访问接口已经可以了,接下来是部署swagger接口文档步骤:

1,右键项目,点击管理NuGet程序包。

切换到浏览,搜索“Swashbuckle.AspNetCore.Swagger”,安装。

 

 

 

 这里如果搜索不到,点击右边设置添加nuget.org

 

 

 程序包源选全部即可搜索下载。

2,安装完成之后,编辑Startup.cs文件

在ConfigureServices方法里加入下面的代码,注册Swagger生成器,定义一个文档,设置xml文档的注释路径,。

//配置Swagger
            //注册Swagger生成器,定义一个Swagger 文档            
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
                {
                    Version = "v1",
                    Title = "接口文档",
                    Description = "RESTful API"
                });
                // 为 Swagger 设置xml文档注释路径
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                c.IncludeXmlComments(xmlPath);
            });

在Configure方法里加入下面的代码,启用中间件服务使用生成Swagger和SwaggerUI,将SwaggerUI中的RoutePrefix设为空字符串,这样就能在根节点(http://localhost:port)直接显示SwaggerUI界面。

//启用中间件服务生成swagger 作为JSON的终点
            app.UseSwagger();
            //启用中间件服务对swagger-ui,指定Swagger JSON终结点
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                c.RoutePrefix = string.Empty;//设置根节点访问
                //加上后,访问地址:https://localhost:44388
                //c.RoutePrefix = "https://localhost:44388/swagger";//访问地址:https://localhost:49382/swagger      
            });

右键属性,生成,勾选XML文档文件,自动填充

 

 

 选择生成xml文件的路径。

3,然后点击调试,将启动浏览器后面url去掉。

 

 

 

4,拷贝生成的xml文件放到IIS发布的路径下即可生成swagger接口文档,直接运行项目可以看到如图:

 

 

 接口后面的注释是controller里面方法上面直接注释,需注意这里的注释必须按照c#标准注释才能显示。

swagger接口文档配置完成。

最后讲一下跨域的处理:接口地址访问已正常,但是网页ajax访问接口则无法访问出现跨域问题,解决方法如下

1,.Net Core 需要引用一个包  Microsoft.AspNetCore.Cors

2,编辑Startup.cs文件

在ConfigureServices方法里加入下面的代码

//添加cors 服务 配置跨域处理            
            services.AddCors(options =>
            {
                options.AddPolicy("any", builder =>
                {
                    builder.SetIsOriginAllowed(_=>true) //允许任何来源的主机访问
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials();//指定处理cookie
                });
            });

在Configure方法里加入下面的代码

 //配置Cors
            app.UseCors("any");

3,配置所有的controller

这里可以直接在整个控制器上,加上 [EnableCors("any")] 标签,也可以在单独的 Action 上加上标签。

  [ApiController]
    [Route("api/[controller]")]
    [EnableCors("any")]
    public class FormController : ControllerBase
    {
        private readonly IFormRepository _formRepository;
        private readonly IPatientRepository _patientRepository;

        public FormController(IFormRepository formRepository, IPatientRepository patientRepository)
        {
            _formRepository = formRepository;
            _patientRepository = patientRepository;
        }
  }

跨域访问问题解决。

posted @ 2020-04-21 17:54  蓝色天空的海  阅读(2956)  评论(0编辑  收藏  举报