IIS 10上的ASP.NET Core 404错误

时间:2016-07-22 14:35:14

标签: c# asp.net iis asp.net-core asp.net-core-1.0

我在IIS 10上运行的ASP.NET Core Web应用程序出了问题。 我正在使用AngularJS开发单页应用程序。

index.html完全加载,但IIS 10上的后端请求失败并显示404错误代码。从带有IIS Express的Visual Studio中,它完美运行。

有人能发现我如何解决后端请求?

这是我的Program.cs

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

    host.Run();
}

这是我在Startup.cs中的配置方法

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseDefaultFiles();

    app.UseStaticFiles();

    app.UseIdentity();

    // Custom middleware for Angular UI-Router
    app.Use(async (context, next) =>
    {
        if (!Path.HasExtension(context.Request.Path.Value)
        && context.Request.HttpContext.Request.Headers["X-Requested-With"] != "XMLHttpRequest"
        && context.Request.Method.ToUpper() != "POST"
        && context.Request.Method.ToUpper() != "PUT"
        && context.Request.Method.ToUpper() != "DELETE")
        {
            await context.Response.WriteAsync(File.ReadAllText(env.WebRootPath + "/index.html"));
        }

        await next();
    });

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "api/{controller=Home}/{action=Index}/{id?}");
    });
}

7 个答案:

答案 0 :(得分:19)

在我的情况下问题是我的控制器抛出异常,因此框架试图使用不可用的异常处理程序页面,因此404错误,控制器本身抛出500错误

答案 1 :(得分:10)

您的代码正在使用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.

在浏览器中,转到以下两个网址。如果他们不能工作,那么您的申请就会出现问题。如果它们确实有效,那么IIS主机就会出现问题。

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

答案 2 :(得分:1)

现在遇到了同样的问题,这使我进入了此页面。如果有人现在遇到这个问题,这就是为我解决的问题:

  1. https://dotnet.microsoft.com/download/dotnet-core/thank-you/runtime-aspnetcore-3.1.4-windows-hosting-bundle-installer

  2. 下载并安装dotnet-hosting-3.1.4-win
  3. https://dotnet.microsoft.com/download/dotnet-core/2.2下载了并安装了dotnet-sdk-2.2.207-win-x64

答案 3 :(得分:1)

我是 Windows IIS 部署的菜鸟,所以这个答案对某些人来说似乎很明显。

我丢失了一个密钥文件 - web.config,IIS 需要它来运行您的 Web 应用程序。我使用了此处指定的 web.config 配置:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/web-config?view=aspnetcore-5.0

特别是 ASP.NET Core 模块的配置。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

如果您使用的是api调用,请确保您的课程具有:

[Route(“ api / [controller]”)] [ApiController]

实例化类的上方。

还要确保您具有: [HttpGet()] 例如在您要调试的api方法上方。

答案 6 :(得分:0)

对我来说,问题是一个称为UrlScan的ISAPI筛选器。我必须将其从应用程序中删除,然后才起作用。