【发布时间】:2016-10-18 14:29:41
【问题描述】:
我有一个用 ASP.NET Core 开发的新 Web API。这个 Web API 应该部署在 IIS 中,并且必须通过 SSL 工作,所以我的所有控制器上都有 [HttpsRequired] 属性。我在部署时很难让它工作,所以现在我放宽了要求并注释掉了这些属性。这样做,我能够在 IIS 中创建两个绑定,一个用于 HTTPS,一个用于 HTTP。鉴于我的 Web API 是在 ASP.NET Core 中创建的,我遵循了 Rick Strahl 在他出色的 blog post 中的部署步骤。我为 .NET CLR 版本选择了“无托管代码”。 IIS 机器是 64 位 Windows Server 2012 R2 环境 - 不确定这是否重要。 .NET Core Windows Server Hosting bundle 已安装在服务器上,我可以看到模块网格中列出的 AspNetCoreModule。
如果我尝试使用 Fiddler 访问 Web Api(我创建了一个非常简单的 GET 方法来返回有关程序集的一些信息),我会收到 404 错误。目前,我在同一台机器上运行 Fiddler,所以我尝试了所有组合(本地主机、IP 地址和域中的完整机器名称)。
EventViewer 中没有记录错误。有人对如何解决此问题有任何建议吗?
TIA, 埃迪
EDIT1:这是我的控制器:
[Route("api/info")]
//[RequireHttps]
public class InfoController : Controller
{
private ITncRepository _repository;
public static ApplicationAssemblyDetails ApplicationAssemblyDetails { get; set; }
public InfoController(ITncRepository repository)
{
_repository = repository;
ApplicationAssemblyDetails = ApplicationAssemblyDetails.Current;
}
[HttpGet("")]
public JsonResult Get()
{
return Json(new WebApiInfoModel()
{
CurrentTime = DateTime.Now,
CurrentUtcTime = DateTime.UtcNow,
AssemblyName = ApplicationAssemblyDetails.ApplicationAssembly.FullName,
VersionNumber = ApplicationAssemblyDetails.VersionNumber,
BinFolder = ApplicationAssemblyDetails.BinFolder,
BuildMode = ApplicationAssemblyDetails.BuildMode,
TradeMark = @" © 2016-2017 * SomeCompany (www.somecompany.com)"
});
}
}
ApplicationAssemblyDetails 是一个 nuget 包,它提供有关当前程序集的一些信息。 WebApiInfoModel 是我想要作为测试传回给客户端的 Web API 信息的模型类。
web.config 文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\My_ASP_NET_Core_Web_API.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true" />
</system.webServer>
</configuration>
最后,为了回答您的最后一个问题,Ignas,我使用发布配置文件,该配置文件使用文件系统作为方法,以 .NET Framework 4.5.2 为目标,使用发布配置。鉴于我的项目是 Web API 而不是 MVC 6 Web 应用程序,发布包创建一个独立的应用程序。由于客户端需要使用 SSL 调用我的 Web API,我认为它必须托管在 IIS 中,因此运行独立应用程序将无法正常工作。当然,出于测试目的,我可以尝试运行它。这就是我注释掉 [HttpsRequired] 属性的原因。我会尝试并报告,但现在我希望我已经为您提供了您需要的所有信息。
【问题讨论】:
-
向我们展示您的控制器和操作设置
-
请提供 web.config 内容
-
您是在构建自包含应用程序 (
exe) 还是依赖于框架 (dll)?如果你直接运行它,而不是通过 IIS,它可以工作吗? -
是的,Ignas,它作为一个独立的应用程序工作,但该应用程序只监听“localhost:5000”,这对我们的客户不利。
标签: c# asp.net-web-api asp.net-core iis-6