Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IIS 10上的ASP.NET Core 404错误_C#_Asp.net_Iis_Asp.net Core_Asp.net Core 1.0 - Fatal编程技术网

C# IIS 10上的ASP.NET Core 404错误

C# IIS 10上的ASP.NET Core 404错误,c#,asp.net,iis,asp.net-core,asp.net-core-1.0,C#,Asp.net,Iis,Asp.net Core,Asp.net Core 1.0,我在IIS 10上运行ASP.NET核心web应用程序时遇到问题。 我正在用AngularJS开发一个单页应用程序 index.html加载完美,但后端请求失败,IIS 10上出现404错误代码。从VisualStudio和IIS Express中,它可以完美地工作 有人知道我如何修复后端请求吗 这是我的程序 public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestr

我在IIS 10上运行ASP.NET核心web应用程序时遇到问题。 我正在用AngularJS开发一个单页应用程序

index.html加载完美,但后端请求失败,IIS 10上出现404错误代码。从VisualStudio和IIS Express中,它可以完美地工作

有人知道我如何修复后端请求吗

这是我的程序

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

你的代码在我的机器上和Kestrel一起工作。一个很好的故障排除步骤是找出问题出在ASP.NET核心应用程序还是IIS主机配置上

从项目的根目录尝试此操作

dotnet restore
dotnet run
您将看到如下内容:

Hosting environment: Production
Content root path: C:\MyApplicationPath
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
在浏览器中,转到以下两个URL。如果它们不起作用,那么您的应用程序就出了问题。如果它们确实起作用,则表明您的IIS主机有问题

localhost:5000        // you will see your index.html page
localhost:5000/api    // you will see your default routes output

在我的例子中,问题是我的控制器抛出了一个异常,因此框架试图使用没有可用的异常处理程序页面,因此404错误,控制器本身抛出了500个错误,以利于搜索者

我在使用IIS时得到了404。我遵循了正确的发布()和部署过程

我花了一段时间才弄明白,但最终我在一本书中找到了答案

基本上,当创建应用程序池并将其设置为“无托管代码”时,我还需要进入高级设置并将应用程序池标识设置为“网络服务”。在我的机器上使用ApplicationPoolIdentity可以,但在我部署到的机器上则不行

因此,为了清楚起见,我的全部程序是:

要创建包,请执行以下操作:

  • 创建dotnet核心网站(我使用的是Visual Studio 2017)
  • 出版。本可以使用VS的发布功能,但我通过包管理器使用了CLR。命令是:

    dotnet发布-c发布-r win-x64--自包含

  • 我必须使用,因为我们必须与64位Windows Server 2008兼容

    要部署:

  • 在C:\inetpub\wwwroot中创建一个文件夹(例如“testsite”)
  • 获取发布文件夹({root}\bin\Release\netcoreapp2.1\win-x64\publish)的内容,并将其复制到新的“testsite”文件夹(或等效文件夹)
  • 在主机上安装dotnet core(不是SDK!)
  • 打开IIS。右键单击“应用程序池”,然后单击“添加应用程序池”。创建一个.NET CLR版本设置为“无托管代码”的版本
  • (我的机器不需要此步骤,但服务器需要)。再次单击应用程序池。右键单击新应用程序池并选择“高级设置”。将标识更改为“网络服务”(如上图所示)
  • 回到顶级IIS,展开“默认网站”,右键单击网站文件夹并选择“转换为应用程序”。选择没有托管代码的新应用程序池
  • 以admin和
    iisreset
    的身份打开命令提示符。您应该只在安装dotnet core运行时后的第一次使用它
  • 参观现场(例如)

  • 另一个非常愚蠢但可能的变体是,由于错误的部署设置,应用程序部署在与您期望的文件夹不同的文件夹中(例如:您的服务器根目录而不是子文件夹)。

    现在也有同样的问题,这让我来到了本页。如果现在有人有这个问题,这就是我解决这个问题的原因:

  • 从下载并安装dotnet-hosting-3.1.4-win

  • 从下载并安装dotnet-sdk-2.2.207-win-x64


  • 如果使用api调用,请确保类具有:

    [路由(“api/[控制器]”)] [ApiController]

    在上面,类被实例化

    还要确保您有: [HttpGet()]
    例如,上面是您试图调试的api方法。

    对我来说,问题是一个名为UrlScan的ISAPI过滤器。我不得不将其从应用程序中删除,然后它才起作用。

    启用ASP.NET核心日志记录(可能是调试日志级别),并查看是否有任何消息说明此操作失败的原因发布您的web.config。您是否配置了MVC服务?是否添加了带有索引操作的主控制器?谢谢,我可以修复它。问题出在我的应用程序上,但如果应用程序出了问题,抛出404错误有点奇怪。应用程序出了什么问题?您的修复涉及什么?问题是缺少配置文件。我有3个环境appsettings文件,用于开发、暂存和生产,并带有必要的连接字符串。默认发布选项仅包含appsettings.json。因此,我需要将值更改为appsettings*.json以复制所有环境设置。根据MSDN文档,当运行时是自包含的时,您不需要安装它:@Aage-这是一个很好的观点-您不需要它来自包含。当然,您仍然需要.NET Core IIS托管捆绑包。您是如何解决问题的?是的,我也很想知道。在开发模式下,异常应该显示在页面上,但它不是。不确定是否存在导致404的异常我认为路由因某种原因中断,如果包含完整路径,我可以到达paga,。。。这将起作用->。。。。这将不起作用->这也不适用于在控制器中检查此答案添加try catch语句
    localhost:5000        // you will see your index.html page
    localhost:5000/api    // you will see your default routes output