C# Asp.NET WebApi中类文件名的路由

C# Asp.NET WebApi中类文件名的路由,c#,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api Routing,是否可以在ASP.NET Web API路由配置中添加允许处理看起来有点像文件名的URL的路由 我尝试在WebApiConfig.Register()中添加以下条目,但没有成功(使用URIapi/foo/0de7ebfa-3a55-456a-bfb9-b658165df5f8/bar.group.json): 不过,以下方法确实有效(它按预期调用了FooController.GetGroup(id,filetag)(使用URIapi/foo/0de7ebfa-3a55-456a-bfb9-b65

是否可以在ASP.NET Web API路由配置中添加允许处理看起来有点像文件名的URL的路由

我尝试在
WebApiConfig.Register()
中添加以下条目,但没有成功(使用URI
api/foo/0de7ebfa-3a55-456a-bfb9-b658165df5f8/bar.group.json
):

不过,以下方法确实有效(它按预期调用了
FooController.GetGroup(id,filetag)
(使用URI
api/foo/0de7ebfa-3a55-456a-bfb9-b658165df5f8/group/bar
):

失败的案例返回一个IIS错误(404-找不到文件),看起来它是由我的应用程序之外的某个东西创建的。错误页(由IIS Express生成)包含以下错误详细信息:

Module = IIS Web Core
Notification = MapRequestHandler
Handler = StaticFile
Error Code = 0x80070002

我猜这意味着一个叫做“静态文件处理程序”的东西在请求到达我的代码之前就已经得到了它。最大的问题是:有没有办法防止这种情况

在进行以下设置后,是否可以尝试:

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

更换处理程序路径过滤器。 通常是这样的:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

请尝试使用'path=“*”'


不,那没用。然而,您的评论为我指出了一个有用的方向(我没有查看那些配置文件)。在深入研究这些问题之后,我认为我试图做的事情似乎与IIS的设计背道而驰,而且我可能会以一种可以使其正常工作的方式对其进行争论,重新设计我的应用程序(并像我在原始文章中的第二个示例那样使用请求URI)可能会更好
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />