【问题标题】:set base path in IISExpress and webapi in ASP.NET 5在 ASP.NET 5 中设置 IIS Express 和 web api 中的基本路径
【发布时间】:2016-02-04 15:42:28
【问题描述】:

我需要让 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>

我尝试在项目属性下更改应用 URL 以反映我的需要: http://localhost:38170/xxx

现在运行项目并点击 http://localhost:38170/xxx/api/values 会导致 404。尝试 http://localhost:38170/api/values 从控制器返回值,就像没有任何变化一样。我注意到 Visual Studio 中的更改不会以任何方式反映在 IIS Express 配置中(我不知道它们是否应该...)。

我尝试在 IISExpress 上手动更改路径,例如在此线程中:Creating virtual directories in 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/*,但没有任何效果。

编辑: 澄清问题。

如何在 IISExpress 上的 ASP.NET 5 (ASP.NET Core) 上设置 WebAPI,使用 httpPlatformHandler 和 Kestrel 设置除根以外的基本路径。

【问题讨论】:

  • 只是为了检查 - 尝试退出/关闭/重新启动 IISExpress(从工具栏中的图标)。有关于 IIS 问题的报告,like this one I randomly hit。没有说它相关(我不知道),所以只是一个健全性检查(至于为什么 VS 属性的更改似乎没有设置)
  • @EdSF 不幸地检查了一百零次 - 结果如所述

标签: asp.net asp.net-web-api asp.net-core iis-express kestrel-http-server


【解决方案1】:

您损坏了文件,因为您的修改符合 IIS Express 配置规则。

我建议你使用 Jexus Manager 之类的智能工具来操作它,然后你可以将 Visual Studio 项目与正确的 URL 同步。

例如,404 是预期的,因为您的应用程序标签的路径设置为 /,因此没有应用程序或虚拟目录来服务 xxx。

后面的 500.19 也是预期的,因为在添加名为 xxx 的有效虚拟目录时,您删除了根虚拟目录。这是完全错误的,因为根虚拟目录必须存在。

【讨论】:

  • 那么你有什么建议呢? Jexus Manager 在没有警告的情况下死去,所以这不是一个选择。如果必须存在根虚拟目录,那么我应该指向哪里? - 那里没有其他应用程序。此外,httpPlatformHandler 似乎正在运行并正确处理请求 - 我检查了日志。它只是收到来自红隼的错误请求或根本没有请求(我不确定)
  • @pg0xC,将config文件恢复为404的情况,然后添加一个新的虚拟目录xxx。根虚拟目录可以指向任何地方(但不应包含 web.config 以避免引入其他设置)。
  • 快到了。情况发生了一些变化——我在localhost:38170/xxx/api/values 上得到了 404,因为我的路由仍然想为 url xxx/api/values 服务。 Api 不起作用,但这是另一个问题。谢谢@Lex Li
猜你喜欢
  • 1970-01-01
  • 2016-11-28
  • 2018-01-01
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
相关资源
最近更新 更多