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

.NET Framework ApiController请求无/带.参数报404,求解决方案

解决.NET Framework ApiController带点参数无尾斜杠404的问题

问题背景

当请求路径参数包含.(比如api/v1/users/some.text)且末尾无/时返回404,带/或参数无.时正常,路由定义为[Route("api/v1/users/{email}")]。

可行的服务端配置方案

1. 为路由参数添加正则约束

直接在属性路由的参数上指定正则约束,允许参数包含点号:

[Route("api/v1/users/{email:regex(^.*$)}")]
[System.Web.Http.HttpGet]
public object GetUserByEmail(string email)

如果是使用全局路由配置,在WebApiConfig.cs的Register方法中修改路由约束:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    constraints: new { id = @"^.*$" } // 允许任意字符,包括点号
);

2. 强制所有请求走ASP.NET管道

IIS默认会把带点号的路径识别为静态文件,跳过ASP.NET处理。在web.config中添加配置让所有请求都经过托管模块:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

也可以针对API路径做精准配置:

<system.webServer>
  <handlers>
    <add name="ApiRequestHandler"
         path="api/*"
         verb="GET,HEAD,POST,PUT,DELETE,PATCH,OPTIONS"
         type="System.Web.Handlers.TransferRequestHandler"
         preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

3. 用URL重写修正请求路径

通过IIS URL重写模块,将带点号且无尾斜杠的请求重写为可被路由识别的格式:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Rewrite dotted paths" stopProcessing="true">
        <match url="^api/v1/users/([^/]+)\.([^/]+)$" />
        <action type="Rewrite" url="api/v1/users/{R:1}.{R:2}/" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

4. 启用双重转义解析

在web.config中开启允许双重转义,确保包含特殊字符的参数能被正确解析:

<system.webServer>
  <security>
    <requestFiltering allowDoubleEscaping="true" />
  </security>
</system.webServer>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:12:03