无法使 ASP.NET Core Web API 与 IIS 一起工作

Cant get ASP.NET Core Web API to work with IIS

我正在构建一个 ASP.NET Core MVC Web Api 应用程序,我正试图让它在我自己的机器上与 IIS 一起工作.我阅读了不同的博客并尝试了不同的方法,但似乎无法正常工作...我的 Winform 客户端在调用 Web api 时只收到 404。通过 Web 浏览器导航到站点 roo 时出现 HTTP 错误 403.14 - 禁止访问。

我是 运行 Windows 10 专业版。已安装 IIS。 ASP.NET 核心服务器托管捆绑包已安装

我已经在 IIS 中添加了网站。应用程序池设置为无托管代码。 在 VS2015 中,我将网站发布到本地文件夹。我将该文件夹的内容复制到 IIS 所在的网站文件夹中。然后我希望它能工作,但它没有:(

这是我的设置:

web.config

  <system.webServer>
<handlers>
  <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<directoryBrowse enabled="true"/>
<aspNetCore processPath="%LAUNCHER_PATH%"
      arguments="%LAUNCHER_ARGS%"
      stdoutLogEnabled="true"
      stdoutLogFile=".\logs\aspnetcore-stdout"
      forwardWindowsAuthToken="false" />

Program.cs

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

    host.Run();
}

StartUp.cs

        public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

appsettings.json

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

project.json:

    {
    "dependencies": {
    "Business": "1.0.0-*",
    "Data": "1.0.0-*",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Routing": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.Extensions.Logging.Debug": "1.1.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0",
    "Microsoft.NETCore.App": "1.1.0"
    },
    "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final"
      },
     "frameworks": {
     "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },
  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },
  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },
  "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },
  "runtimes": {
    "win10-x64": {}
  },
  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

IIS 中的网站

IIS 中的应用程序池

网站路径的文件夹结构

我的 IIS

将 IIS 指向 MyWebAPI 而不是 MyWebAPI/wwwroot。否则您将收到 "HTTP Error 403.14 - Forbidden" 错误。

这是一个demo application on GitHub。它使用与您答案中的应用程序相同的设置。当我像这样将它发布到我的 IIS 时它起作用了:

dotnet publish -o C:\inetpub\wwwroot\sandbox\