处理程序映射的嵌套 WebAPI 问题(继承问题?)

Posted

技术标签:

【中文标题】处理程序映射的嵌套 WebAPI 问题(继承问题?)【英文标题】:Nested WebAPI issue with handler mappings (inheritance issue?) 【发布时间】:2015-02-21 11:30:07 【问题描述】:

我有一个 Asp.net WebAPI 2 (.net 4.5) 站点在我的本地计算机上独立运行,现在我想将其作为虚拟应用程序“嵌入”到 Web 表单 (.net 4.0) 应用程序中。

在服务器上,我建立了一个新的站点和应用程序池,并在那里配置了 API,它工作正常。然后,我在父 Web 表单应用程序中创建了一个虚拟应用程序,并将其指向相同的文件夹位置和应用程序池。

我通过将 system.web 包装在 location 元素中来防止继承它

<location path="." inheritInChildApplications="false">

这解决了我遇到的一些问题,但现在我收到 500 错误。我可以看到我的事件日志:

异常消息:System.Web.Routing.UrlRoutingModule 没有 实现 IHttpHandlerFactory 或 IHttpHandler。

我认为这不是实际问题,而是配置文件中处理程序映射问题的一个指标。我已经为父应用程序中映射的所有处理程序添加了元素,但这并没有解决它。 如果我进入 API 的 web.config 并注释掉

 <add name="UrlRoutingModule-4.0"
 type="System.Web.Routing.UrlRoutingModule" preCondition="" path="*."
 verb="*" />

错误消失了,我收到 200 响应,但没有从 API 返回数据,这让我觉得它实际上不知道如何处理请求? 我在谷歌上搜索了很多,但无法找到底线或这个;只是想知道是否有人对这可能是什么有任何建议?

正如我所说,在独立模式下,相同的代码/配置工作正常 - 只有当它嵌套在另一个应用程序中时才会导致问题,这让我认为这是一个配置继承类型问题。

谢谢

【问题讨论】:

我假设 Web Forms 项目和 WebAPI 项目都有自己的 web.config。您是否尝试过在 WebAPI 的 web.config 中使用 属性,这样它就不会继承包含 Web 表单 web.config 的所有设置? 如果您将应用程序分开,维护和发展会更容易。您可以限制使用 webapi 只接受来自您的 webform 应用程序的请求。为什么需要嵌入? 【参考方案1】:

为什么需要将 WebApi 作为虚拟应用程序?

将其作为自己的站点在 IIS 中保持隔离更有意义。

【讨论】:

以上是关于处理程序映射的嵌套 WebAPI 问题(继承问题?)的主要内容,如果未能解决你的问题,请参考以下文章

继承类型的 WebApi 模型绑定

autoMapper dotnetcore webapi 自动添加映射 abp

我可以告诉 WCF WebAPI 序列化程序忽略嵌套类对象吗?

如何在Windows Server2008R2中部署WebAPI

WebAPI发布IIS报错问题

如何在 VTL 中处理 AWS APIG 映射模板中的嵌套列表