Asp.Net core不同于以往的asp.net,它不仅仅可以寄宿在IIS上,还可以寄宿到windows后台服务中,或者Kestrel中。不过本次篇幅不讲解寄宿方式,而是来聊下asp.net core基本启动部署的基础知识。
访问方式
asp.net core 包含有http和https两种方式模式,开发模式下会有开发证书供给https协议使用。
我们在部署的过程中,默认http访问请求会跳转到https访问,如果不想启用https,只需要在Startup
文件中,删除app.UseHttpsRedirection()
即可。
启动配置项
无论我们是新建MVC模版,还是WebAPI模版,我们的asp.net core的启动模式都是一样的。只是带不带View和resetfull的规范约束的区别。
asp.net core 提供了两种方式修改我们需要监听的URL:
- 配置文件
Properties.lanuchSettings.json
中 - 后台代码
Program.cs
或其它注入位置
默认情况下,asp.net core默认会以localhost
做为端口监听范围,这种情况下,只有使用localhost
才能访问我们的服务。
配置文件如下所示:
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:51340",
"sslPort": 44332
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/MartixService",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"myproject": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/MartixService",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
从配置文件中我们可以看到,主要有三种方式寄宿:IIS
,IIS Express
,Project
。
IIS:部署到IIS时,会用到的配置项。
IIS Express:开发环境下,使用IIS Express调试时,会用到的配置项。
Project:开发环境下,直接启动项目编译后的exe时,会用到的配置项。
部分节点说明:
sslPort
:表示启用https时访问的端口地址
commandName
:表示启动的寄宿进程名
launchBrowser
:是否启动浏览器
launchUrl
:启动的默认路由地址,服务启动后默认跳转路由地址
applicationUrl
:启动的URL地址,服务启动时会引用该配置
ASPNETCORE_ENVIRONMENT
:表示asp.net运行环境,Development表示开发环境
ASPNETCORE_ENVIRONMENT
中的Development
的使用主要可以用于开发模式下的一些额外处理,如异常处理。
具体代码如下:
//开发环境下,注入异常处理模块
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
服务监听有几种方式:
- 使用0.0.0.0,监听本地IP4所有地址。如:
http://0.0.0.0:5000
- 使用*,监听本地IP6所有地址。如:
http://*:5000
- 使用固定IP地址,监听本机地址。如:
http://127.0.0.1:5000
- 监听本地地址。如:
http://localhost:5000
默认情况下是监听localhost
地址。
以上配置项,我们在开发模式下,通常都可以正常生效,当我们发布程序后,直接运行启动程序,我们会发现无论怎么修改配置项,始终是监听localhost
本地地址。这是因为,我们发布的程序已经不是开发环境下了,这种情况下我们就需要通过后台代码来设置。
后台代码设置监听
后台代码设置URL也很简单,只需要在程序启动的时候,通过WebBuilder调用UseUrls方法,即可将启动的URL配置进去。上代码:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("http://0.0.0.0:5000", "https://0.0.0.0:5001");
webBuilder.UseStartup<Startup>();
webBuilder.UseKestrel();
});
UseKestrel
表示使用Kestrel
服务器,也可以不写。
以上方式配置完成后,你用微软的Edge浏览器请求web api
时,可能会出现网络无法访问的情况!这种情况下,可以直接打开F12启动调试模式,查看网络通信情况。
网络返回 200 0K,但是没有数据返回!
继续看,我们会发现,Edge浏览器有做访问限制。
在局域网环境下,我们使用其它浏览器(包括IE浏览器)尝试,都可以正常访问,基本可以确定是Edge浏览器访问权限设置问题。
下面先附上谷歌浏览器访问的情况:
解决Edge浏览器无法访问的问题
根据前面的内容,我们已经确定是浏览器的问题,那么针对这个问题要如何解决呢?
首先看到错误提示CONSOLE21301: serviceWorker.getRegistrations 由于 ms-appx-web://microsoft.microsoftedge/assets/errorpages/dnserror.html?ErrorStatus=0x800C0005&NetworkStatusSupported=1 中的不安全上下文或主机限制而被拒绝。
是因为Edge浏览器做了ip访问的限制,我们可以通过解除该限制,让浏览器正常访问。
具体方法如下:
先打开PowerShell
,获取Edge浏览器的app id。
- PowerShell中输入命令:
Get-StartApps
,找到Microsoft Edge
以及其AppID
。本机版本是:Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge
。 - 以管理员身份运行
cmd
,输入命令:CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe
CheckNetIsolation LoopbackExempt
用法:
CheckNetIsolation LoopbackExempt [operation] [-n=] [-p=]
操作列表:
-a - 向环回免除列表中添加 AppContainer 或程序包系列。
-d - 从环回免除列表中删除 AppContainer 或程序包系列。
-c - 清除环回免除的 AppContainer 和程序包系列的列表。
-s - 显示环回免除的 AppContainer 和程序包系列的列表。
参数列表:
-n= - AppContainer 名称或程序包系列名称。
-p= - AppContainer 或程序包系列安全标识符(SID)。
-? - 显示 LoopbackExempt 模块的此帮助消息。
执行结果:
我们在用Edge浏览器重新输入我们之前输入的URL,此次访问,就可以正常获取数据了。 如下所示:
起初以为是asp.net core的寄宿问题,经过调查最终才发现,原来都是Edge惹的祸!!
启动报错Unable to configure HTTPS endpoint. No server certificate was specified
因为.net core默认是使用https协议,使用Kestrel web服务器没安装证书就会报错。所以只需要打开cmd
命令行,执行以下命令就可以安装开发测试证书。
打开cmd
命令,执行dotnet dev-certs https --trust
。
重新编译和重启站点即可。
本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/asp.net-core-%E5%9F%BA%E7%A1%80-%E9%99%84%E5%B8%A6%E8%A7%A3%E5%86%B3Edge%E6%B5%8F%E8%A7%88%E5%99%A8IP%E5%9C%B0%E5%9D%80%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E9%97%AE%E9%A2%98.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。