.NET Core 2 MVC仅HTTPS可访问,HTTP无法加载问题求助
首先,咱们先拆解下你的问题:HTTPS访问正常,但HTTP一直加载无响应且日志无异常,这大概率是HTTP请求根本没到达你的API应用——要么是端点没配置,要么是IIS Express没开启HTTP监听。结合你要用iisexpress-proxy(仅支持HTTP)做手机测试的需求,咱们一步步来解决:
1. 检查项目启动配置(launchSettings.json)
打开项目根目录下的Properties/launchSettings.json,找到你的目标配置项(比如IIS Express或项目名称对应的profile),确保applicationUrl同时包含HTTPS和HTTP地址,示例如下:
"profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "launchUrl": "api/values", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "applicationUrl": "https://localhost:44333;http://localhost:5000" }, "YourApiProject": { "commandName": "Project", "launchBrowser": true, "launchUrl": "api/values", "applicationUrl": "https://localhost:44333;http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } }
这里给HTTP指定了5000端口,你可以换成其他未被占用的端口,但注意不要和HTTPS的44333冲突(HTTPS默认用443段端口,HTTP尽量选80、5000这类常规端口)。
2. 显式配置Kestrel端点(Program.cs)
.NET Core 2默认用Kestrel作为Web服务器,你可以在Program.cs里直接指定HTTP和HTTPS监听端口,避免依赖launchSettings的默认配置:
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel(options => { // 配置HTTP监听端口 options.ListenLocalhost(5000); // 配置HTTPS监听端口(沿用你原来的44333) options.ListenLocalhost(44333, o => o.UseHttps()); }) .Build();
这样不管用IIS Express还是直接运行项目,Kestrel都会同时监听两个端口。
3. 修正IIS Express的绑定配置
如果你用IIS Express运行项目,可能需要手动修改IIS配置文件。找到项目根目录下的.vs/config/applicationhost.config(这个文件夹是隐藏的,需先显示隐藏文件),搜索你的项目名称,找到<site>节点,确保<bindings>里同时包含HTTP和HTTPS绑定:
<site name="YourApiProject" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Your\Project\Full\Path" /> </application> <bindings> <binding protocol="https" bindingInformation="*:44333:localhost" /> <binding protocol="http" bindingInformation="*:5000:localhost" /> </bindings> </site>
添加完HTTP绑定后,重启IIS Express生效。
4. 测试HTTP访问
完成上述配置后,重启API项目,访问http://localhost:5000(对应你设置的HTTP端口),应该就能正常响应了。如果还是不行,检查防火墙是否拦截了该端口,或者用netstat -ano命令查看端口是否被占用。
5. 配置iisexpress-proxy用于手机测试
当HTTP访问正常后,就可以用iisexpress-proxy把本地HTTP端口代理到手机可访问的地址了。比如把本地5000端口代理到3000端口:
iisexpress-proxy 5000 to 3000
确保你的手机和电脑在同一个局域网内,用手机浏览器或测试工具访问http://你的电脑IP:3000,就能正常调用API了。
内容的提问来源于stack exchange,提问作者Luuk Wuijster

