C# 参数返回404的WebAPI路由属性
我可以在Fiddler中看到相应的C# 参数返回404的WebAPI路由属性,c#,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api Routing,我可以在Fiddler中看到相应的HttpRequest,但从未调用控制器方法,但请求似乎被拦截,并返回404。适当地调用其他控制器方法 HttpRequest GET http://localhost:36696/test/file/69946/FF47F87FE63E6C24644631FAEA15B157/file.pdf HTTP/1.1 Host: localhost:36696 Connection: keep-alive Cache-Control: max-age=0 Accep
HttpRequest
,但从未调用控制器方法,但请求似乎被拦截,并返回404
。适当地调用其他控制器方法
HttpRequest
GET http://localhost:36696/test/file/69946/FF47F87FE63E6C24644631FAEA15B157/file.pdf HTTP/1.1
Host: localhost:36696
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,sv;q=0.6
控制器方法
[Route("test/file/{fileId:int}/{hash}/file.pdf")]
public HttpResponseMessage GetFile(int fileId, string hash)
{
[..]
}
问题
- 如何使用正确设置路由(
) 嵌入参数System.Web.HttpRouteAttribute
- 是否有任何默认筛选器禁止我访问PDF文件? 这在IIS Express(VS2013)中
web.config
,但文件中没有httpHandlers
或mimeType
条目。问题在于路由中的“.”。web配置中的以下内容将允许:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
...
</system.webServer>
...
我还应该补充一点,似乎还有其他web.config条目也会影响这一点。这就是我用来解决这个问题的方法。搜索“带点的webapi路由”应该会向您展示其他解决方案,并提供更深入的解释。IIS认为它正在寻找静态文件,而不是通过托管管道运行请求 将此条目添加到
下的web.config将告诉IIS通过路由/托管管道运行这些请求
<add
name="ManagedPDFExtension"
path="test/file/*/*/*.pdf"
verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
我在
路径
中明确地包含了路由,这样它就不会在整个.NET管道中运行所有静态内容。如果您有很多这样的端点,或者以这种方式为所有文件提供服务,那么您可以使用更通用的路径模式。谢谢您的输入,但这实际上是一个糟糕的想法——“一切顺利”——使所有ASP.NET模块能够针对我的应用程序中的每个请求运行,而不管“managedHandler”的前提条件是什么,呈现可能的安全漏洞…马库斯-我刚刚编辑了我的答案。再说一遍,“.”是你的问题。如前所述,似乎有很多方法可以解决这个问题——上述方法确实有效,但您也应该能够找到其他方法。就个人而言,如果你不需要“.”,我会改变你的路线。这实际上是我在阅读你的答案前几秒钟选择的解决方案。谢谢你的确认!