WebApi服务器发布__基于WinServer2019_DoNet8.0_IIS10.0

一、前言

记录一次webapi发布过程
服务器 WinowServer2019 DataCenter
开发框架 .net 8.0.2 的webapi
IIS10.0(服务器自带)

因为SQLServer的数据,就没办法不用windows的服务器

二、IIS配置

在这里插入图片描述
在这里插入图片描述
常规安装就好,我主要是要framework的代码,所以装个4.7

三、创建站点

在这里插入图片描述
在这里插入图片描述
这里是你windows的登录账户密码
在这里插入图片描述
然后完成就好

四、连接池配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、配置服务器

下载ASP.NET Core 运行时
https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0
在这里插入图片描述
在这里插入图片描述
运行时和托管包都要安装。注意与开发环境兼容。

在这里插入图片描述

模块里有这个就算安装成功了。

六、运行出报错403.14

微软异常参考文档:https://learn.microsoft.com/zh-cn/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-8.0

出了403.14这错误,对比总结,反应过来 项目内目录外的upload上传文件夹没有复制过来。

在这里插入图片描述
顺便给个Everyone的权限。防止上传图片没创建目录权限。

七、运行出报错500.30

在这里插入图片描述

出了500.30错误 webconfig里的inprocess改成outofprocess

八、运行404 无法打开swagger UI

错误倒是没有了,但是你这给我个404页面,我有点懵啊。
1、改launchSettings.json,注释掉默认的
在这里插入图片描述
2、改 Program.cs,将开发改成全局,并制定路径
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f36893f76c5f4d8bb808b4df63bb66e2.png

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "xxApi V1");
    c.RoutePrefix = "";
});

这样就能解决404问题了, 刷新IIS站点,预览 http://8.8.8.8:7070/index.html,swaggerUI就出来了,记得做好鉴权哟,我之前的文章也记录过JWT鉴权配置
在这里插入图片描述

九、数据无法连接ConnectionStrings为空

我的设置写在app.config里,ODBC连的数据库
在这里插入图片描述
上传后,swagger能打开,鉴权能实现,读取数据库却失败。
1、删除app.config
2、将 连接设置写入appsettings.json
在这里插入图片描述

3、解析appsettings.json获取ConnectionStrings

 public class ConnectionString
 {
     static IConfiguration _configuration;
     static ConnectionString()
     {
         _configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", true, true).Build();
     }

     /// <summary>
     /// 数据库连接信息
     /// </summary>
     public static CntConfig DbConfig => _configuration.GetSection("ConnectionStrings").Get<CntConfig>();

 }
 public class CntConfig
 {
     public string constr { get; set; }
 }

4、将ConnectionStrings用起来,在Program.cs 里赋值给odbc的static 连接字符
在这里插入图片描述
问题得到解决。

十、跨域问题,URL重写,反向代理

比如:网站是http://8.8.8.8:8080/ webapi是7070
不同站点8080 request直接访问7070肯定跨域
我们要将8080,反代成7070解决跨域。简单的说看起来是访问的8080,其实内部咱们已经给他换成了7070的地址。
当然更简单的办法,前端、后端和API放到IIS同一个站点下的不同文件夹目录里

1、ARR下载安装:https://www.iis.net/downloads/microsoft/application-request-routing
注意在页底
在这里插入图片描述
在这里插入图片描述
出现这个图标就表示安装成功了
在这里插入图片描述
在这里插入图片描述
勾选,应用就可以了

2、配置 反代有两种方法,一种是直接web.config里设置 如:
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="跨域方案">
                    <match url="api\/?(.*)" />
                    <conditions>
                    </conditions>
                    <action type="Rewrite" url="http://8.8.8.8:7070/api/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

意思呢,就是说,匹配到“api/”,重写成 “http://8.8.8.8:7070/api/{R:1}”

另外一种,安装rewrite:https://www.iis.net/downloads/microsoft/url-rewrite

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保存,应用后,其实也是写到webconfig里的。

十一、webApi静态文件路径设置 失效

补更一个小问题:图片打不开了
我的图片是CS、BS 共用,所以Upload文件,我放在 解决方案内、API之外,结构如下:

Solution
 |---Upload
 |---Webapi
 |---WinForm
 |--......

Program.cs我是这样写的。
意思是,访问 Solution/webapi/Upload ,反射到 Solution/Upload 的实际图片路径。
在这里插入图片描述

前提描述清楚了,问题就是发布后图片打不开了。
解决:app.Environment.ContentRootPath应该是获取的项目文件路径,将
api发布后文件夹名 改成和 项目API名 一致,得到解决

发布ASP.NET Core Web API到公网之前,需要经过几个步骤: 1. **构建项目**:首先确保你的API已经完成开发并通过`dotnet build`命令成功构建。如果项目包含依赖项,可能还需要运行`dotnet restore`来恢复所有必要的库。 2. **配置部署设置**:创建一个新的发布目录(如`publish`),然后使用`dotnet publish`命令生成应用程序文件和依赖文件,这将创建一个自包含的发布包。 ```sh dotnet publish -c Release -r <your-runtime-target> -o publish ``` `<your-runtime-target>`可以是Windows、Linux或MacOS对应的运行时,比如`win-x64`或`ubuntu.18.04-x64`。 3. **设置IISWindows)**: - 如果是在Windows上,你需要安装IIS(Internet Information Services),然后添加一个新的Web应用,并指向发布的目录。 - 配置应用程序池使用.NET Core支持,例如选择`.NET Framework 4.x`或`.NET Core`版本。 4. **设置Kestrel(自托管)**: - 对于更轻量级的场景,你可以选择使用Kestrel自托管服务。在启动命令中指定发布的目录,如`dotnet run --urls http://+:5000`。 5. **SSL/TLS配置**: - 公网访问通常需要HTTPS,为此你需要获取SSL证书。可以选择购买证书,也可以使用Let's Encrypt等免费工具自动申请。 - 将证书安装到IIS或自托管服务器上,如果是IIS,则需要配置网站的绑定为HTTPS。 6. **测试连接**: 使用浏览器或其他HTTP客户端(Postman、curl)测试API是否可用,并确认安全设置(如HTTPS)正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值