参数返回404

时间:2015-10-02 13:54:38

标签: c# asp.net-web-api asp.net-web-api-routing

我可以在Fiddler中看到相应的HttpRequest但是从不调用Controller方法但是请求似乎被拦截并返回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以了解隐私问题,但文件中没有httpHandlersmimeType条目。

2 个答案:

答案 0 :(得分:3)

IIS认为它正在寻找静态文件,并且没有通过托管管道运行请求。

将此条目添加到<handlers>下的web.config将告诉IIS通过路由/托管管道运行这些请求。

   <add
        name="ManagedPDFExtension"
        path="test/file/*/*/*.pdf"
        verb="GET"
        type="System.Web.Handlers.TransferRequestHandler"
        preCondition="integratedMode,runtimeVersionv4.0" />

我在path中非常具体地包含了该路由,因此它不会通过完整的.NET管道运行所有静态内容。如果您有很多这些端点或以这种方式提供所有文件,那么您可以使用更通用的路径模式。

答案 1 :(得分:0)

问题是“。”在路线上。 Web配置中的以下内容将允许它:

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

我还应该补充说,似乎还有其他web.config条目也会影响到这一点。这只是我用来解决这个问题的那个。搜索“带点的webapi路由”应该会向您展示其他解决方案,并提供更深入的解释。