我需要让 WebAPI 项目在与平时不同的基本路径下工作。我在 Visual Studio 下创建了使用 WebAPI 和 ASP.NET 5 的简单项目。
在设置为http://localhost:38170/的基本路径下,我的项目工作正常,我能够从测试控制器(http://localhost:38170/api/values)获取值。在这个阶段,我的 IIS Express 配置是:
<site name="WebApi" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\WebApi\src\WebApi\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:38170:localhost" />
</bindings>
</site>
我尝试在项目属性下更改 App URL 以反映我的需要: http://localhost:38170/xxx
现在运行项目并点击http://localhost:38170/xxx/api/values会导致 404。尝试http://localhost:38170/api/ values 从控制器返回值,就好像没有任何改变一样。我注意到 Visual Studio 中的更改不会以任何方式反映在 IIS Express 配置中(我不知道它们是否应该......)。
我尝试像在这个线程中那样手动更改 IISExpress 上的路径:在 IIS express 中创建虚拟目录。
<site name="WebApi" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/xxx" physicalPath="C:\WebApi\src\WebApi\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:38170:localhost" />
</bindings>
</site>
结果是:
http://localhost:38170/api/values - 500.19 错误(配置错误),这很好 - 我不打算这样做
http://localhost:38170/xxx/api/values - 502.3 - 访问 httpPlatformHandler 时网关错误
我想这个错误是在 httpPlatformHandler 配置中的某个地方,但我不确定如何与 IIS Express 结合使用。我的 web.config 是:
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
</handlers>
<httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
</system.webServer>
</configuration>
我尝试了随机更改,例如路径属性的更改,xxx/*
但没有任何效果。
编辑:澄清问题。
如何使用 httpPlatformHandler 和 Kestrel 在 IISExpress 上的 ASP.NET 5 (ASP.NET Core) 上设置 WebAPI 以设置除根以外的基本路径。