asp.net - IIS 经典模式 .NET Web API 调用返回 404 错误
问题描述
我有一个预先存在的 VB.NET Web 应用程序在 Windows Server 2012 R2 的 IIS 8 上运行。应用程序需要处理我使用 APIController 接口实现的新 API 调用(例如 localhost/test/ping)。我能够在本地 Visual Studio 上成功运行 API 调用,但是一旦将其部署到 IIS,url 就会返回 404 错误。
经过一些挖掘和研究,我认为部分问题是网络应用程序在处理程序映射中没有 ExtensionlessUrlHandler-Integerated-4.0。查看配置,显然部分先决条件是应用程序不能是经典模式下的我,我的是。我无法切换到会破坏我的应用程序的集成模式。
有没有办法绕过这个限制。
更新:添加 web.config
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<add name="MVC" path="*." verb="*" type="" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="File" requireAccess="None" allowPathInfo="false" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="4194304" />
</handlers>
</system.webServer>
更新:添加源代码
测试控制器.vb
<RoutePrefix("message")>
Public Class PingController
Inherits ApiController
Public Sub New() {
...
}
<Route("")>
<HttpGet>
Public Function GetMessage As String
Return "Hello World"
End Function
...
全球.asax
<script runat="server">
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)
End Sub
...
WebApiConfig.vb
Public Class WebApiConfig
Public Shared Sub Register(ByVal Configuration As HttpConfiguration)
Configuration.MapHttpAttributeRoutes()
End Sub
End Class
解决方案
如果您对服务器具有完全访问权限,则可以创建所谓的通配符脚本映射,以便您可以将默认的 ASP.NET MVC 路由表与 IIS 7.0(在经典模式下)或 IIS 6.0 一起使用。此通配符脚本映射会将所有到 Web 服务器的请求映射到 ASP.NET 框架。
为 IIS 7.0(经典模式)启用通配符脚本映射:
1)打开 IIS,选择您的站点/应用程序
2) 双击中间窗格中的处理程序映射
3)单击添加通配符脚本映射链接
4)输入aspnet_isapi.dll文件的路径(可以从PageHandlerFactory脚本映射复制这个路径)
输入名称 MVC 点击确定按钮
为 web.config/system.webServer/handlers 部分添加 runAllManagedModulesForAllRequests="true"
有关更多详细信息,请参阅以下链接:
推荐阅读
- javascript - PHP 联系页面 – 如何指定输入字段的最小字母
- java - 使用 FixedThreadPool(s) 和队列的 Java 设计
- database - 游牧任务被杀
- powershell - PowerShell - 使用下划线将属性名称从 Pascal 大小写转换为大写
- linux - sed 用文件分隔符替换文本
- c# - 在 C# 中通过 http 进行实时数据流传输
- excel - 从具有可变数量的单元格中分离名称和百分比
- xpath - 为什么 //div[@title='value'] 可能不起作用?
- android - 随机播放适配器中的一些数据
- r - 如何从 download.file 请求中捕获 HTTP 错误代码?