c# - Net Core 部署的应用程序在 IIS 上引发错误 404
问题描述
我正在开发一个以 Angular 7 作为前端,Net Core 3.0 作为后端的网络应用程序。在开发模式下一切正常,我可以从前端、直接从浏览器和 Postman 以及https://localhost:5001/api/controller/params调用 URI
出于演示目的,我必须立即发布。从 CLI 和 Visual Studio (Mac) 来看,一切正常:使用路径 project/bin/Release/netcoreapp3.0/publish/所有 .dll 文件、web.config 等生成的文件夹。
但是,当我在 IIS 上发布时,如果我调用https://appname.myserver.com/api/controller/params或 http,浏览器会给我一个 404 错误。如果我调用http://appname.myserver.com/,我会看到蓝色的 IIS 屏幕,其中包含不同语言的欢迎消息。
IIS 配置遵循此处的 Microsoft 说明:https ://docs.microsoft.com/en-us/aspnet/core/tutorials/publish-to-iis?view=aspnetcore-3.1&tabs=visual-studio
我没有直接发布到 IIS,因为我无权访问服务器,但是我确实远程监督了设置过程。
我查看了网络,有人建议在我的 Program.cs 文件中执行此操作:
namespace BackEnd
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseIISIntegration();
webBuilder.UseKestrel();
webBuilder.UseUrls("http://localhost:5000", "https://localhost:5001");
});
}
}
web.config 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\BackEnd.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
这是 applicationHosting.config:
<site name="backendv2.hawk-poslatinoamericana.com.mx" id="10" serverAutoStart="true">
<application path="/" applicationPool="No Managed Code" enabledProtocols="http">
<virtualDirectory path="/" physicalPath="C:\HostingSpaces\poslatino\backendv2.hawk-poslatinoamericana.com.mx\wwwroot" />
</application>
<bindings>
<binding protocol="https" bindingInformation="169.57.1.244:5001:backendv2.hawk-poslatinoamericana.com.mx" sslFlags="0" />
<binding protocol="http" bindingInformation="169.57.1.244:5000:backendv2.hawk-poslatinoamericana.com.mx" />
<binding protocol="http" bindingInformation="169.57.1.244:5000:www.backendv2.hawk-poslatinoamericana.com.mx" />
<binding protocol="https" bindingInformation="169.57.1.244:5001:www.backendv2.hawk-poslatinoamericana.com.mx" sslFlags="0" />
</bindings>
<logFile directory="C:\HostingSpaces\poslatino\backendv2.hawk-poslatinoamericana.com.mx\logs" enabled="true" />
<traceFailedRequestsLogging enabled="true" directory="C:\inetpub\logs\FailedReqLogFiles" maxLogFiles="50" />
<limits connectionTimeout="00:04:00" />
</site>
但到目前为止,没有运气,我没有想法。
解决方案
根据您的描述,我发现您将两个域绑定到 5000 和 5001 端口,而不是 80 端口。
如果调用https://appname.myserver.com
,它将访问服务器的 443 端口,而不是 5000 和 5001 端口。如果调用http://appname.myserver.com
,它将访问服务器的 80 端口。
此外,如果您想在 IIS 中托管 asp.net 核心应用程序,您应该使用以下步骤首先创建 Web 应用程序:
在托管系统上,创建一个文件夹以包含应用程序的已发布文件夹和文件。在接下来的步骤中,该文件夹的路径将作为应用程序的物理路径提供给 IIS。有关应用的部署文件夹和文件布局的详细信息,请参阅 ASP.NET Core 目录结构。
在 IIS 管理器中,在“连接”面板中打开服务器节点。右键单击站点文件夹。从上下文菜单中选择添加网站。
提供站点名称并将物理路径设置为应用程序的部署文件夹。提供 Binding 配置并通过选择 OK 创建网站:
注意:端口是 80 而不是 5001
推荐阅读
- android - err_unknown_url_scheme WebView
- node.js - newman CLI 在 teamcity 构建中返回“错误:无法获取本地颁发者证书”
- google-cloud-platform - 基于 GPU 利用率的自动缩放?
- android - 布局没有资源标识符?
- javascript - 禁用提交按钮,如果没有勾选复选框
- python - Errno 13 运行 virtualenv 时权限被拒绝
- mysql - 如果第二个表中为空,则 MySQL 连接查询结果
- python-3.x - Python Flask 1.0.2 WYSIWYG 文本编辑器不工作
- c# - 为什么在不同脚本中使用相同代码的相机与播放器不同?
- swift - textView 中数组中的文本(在 TableCell 中)