ASP.NET站点部署至IIS后控制器路由失效问题排查
本地IIS部署REST服务路由失效问题解决
问题说明
REST服务在IIS Express中运行正常,部署到本地IIS后路由功能失效:
- 访问根路径
http://localhost:8000/可查看目录内容 - 访问API接口
http://localhost:8000/api/HeartBeat返回404 - Not Found - 使用PowerShell命令
Get-WebURL -PSPath "IIS:\Sites\Test"返回ProtocolError,描述为Forbidden
已做配置:
- 项目编译为x86架构,部署至允许32位进程的应用程序池
- 站点映射至构建输出文件夹,构建命令:
msbuild /p:Configuration=Release /p:ProcessorArchitecture=x86 -r:False - 启用匿名身份验证
- HTTP绑定端口8000
- 启用目录浏览
相关代码
路由配置类
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
控制器代码
public class HeartBeatController : ApiController { // GET: api/HearBeat/5 public HttpResponseMessage Get() { return new HttpResponseMessage(HttpStatusCode.OK); } }
排查与解决步骤
确认ASP.NET模块安装状态
- 打开「控制面板>程序>启用或关闭Windows功能」,确保「Internet Information Services>万维网服务>应用程序开发功能」下对应项目的.NET版本(如ASP.NET 4.8)已勾选安装。
- 在IIS管理器中进入站点的「模块」页面,确认
System.Web.Http.WebHost等WebAPI相关模块已加载。
检查应用程序池配置
- 应用程序池的「.NET CLR版本」需设置为项目对应的.NET框架版本(如v4.0.30319),不可选择「无托管代码」。
修正Web.config配置
- 确保
Global.asax的Application_Start方法中已调用WebApiConfig.Register(GlobalConfiguration.Configuration)。 - 添加或更新以下配置,确保IIS正确处理无扩展名的API请求:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule"/> </modules> <handlers> <remove name="WebDAV"/> <remove name="ExtensionlessUrlHandler-Integrated-4.0"/> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/> </handlers> </system.webServer> - 检查匿名身份验证的用户是否拥有站点物理路径的读写权限,避免Forbidden错误。
- 确保
验证路由匹配
- 确认请求URL拼写正确:控制器类名是
HeartBeatController,路由匹配后的URL应为api/HeartBeat(代码注释中的拼写错误不影响实际路由)。 - 启用路由调试排查匹配问题:在Web.config的
appSettings中添加<add key="RouteDebugger:Enabled" value="true"/>,访问根路径查看路由规则匹配情况。
- 确认请求URL拼写正确:控制器类名是
修复站点权限
- 右键站点物理路径文件夹>属性>安全,添加应用程序池标识(如
IIS AppPool\Test),并赋予读取、执行权限。
- 右键站点物理路径文件夹>属性>安全,添加应用程序池标识(如
内容的提问来源于stack exchange,提问作者Nick__Dudas
相关产品推荐
相关产品推荐

