You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
    }
}

排查与解决步骤

  1. 确认ASP.NET模块安装状态

    • 打开「控制面板>程序>启用或关闭Windows功能」,确保「Internet Information Services>万维网服务>应用程序开发功能」下对应项目的.NET版本(如ASP.NET 4.8)已勾选安装。
    • 在IIS管理器中进入站点的「模块」页面,确认System.Web.Http.WebHost等WebAPI相关模块已加载。
  2. 检查应用程序池配置

    • 应用程序池的「.NET CLR版本」需设置为项目对应的.NET框架版本(如v4.0.30319),不可选择「无托管代码」。
  3. 修正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错误。
  4. 验证路由匹配

    • 确认请求URL拼写正确:控制器类名是HeartBeatController,路由匹配后的URL应为api/HeartBeat(代码注释中的拼写错误不影响实际路由)。
    • 启用路由调试排查匹配问题:在Web.config的appSettings中添加<add key="RouteDebugger:Enabled" value="true"/>,访问根路径查看路由规则匹配情况。
  5. 修复站点权限

    • 右键站点物理路径文件夹>属性>安全,添加应用程序池标识(如IIS AppPool\Test),并赋予读取、执行权限。

内容的提问来源于stack exchange,提问作者Nick__Dudas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:45:14