2016-09-08 44 views
1

我有一个处理图像请求的.NET控制器。为什么HTTP GET请求在HTTP GET时没有被routes.MapRoutes()捕获?

有在web.config中,其将http://localhost/images/1809x1280/image1.jpghttp://localhost/image/get/image1.jpg/1809/1280

然后我有以下RouteConfig规则

routes.MapRoute() 
     name: "Images", 
     url: "image/get/{filename}/{width}/{height}", 
     defaults: new { controller = "Image", action = "Get" } 
    ); 

当我执行HTTP GET请求的URL重写规则,动作正确路由到正确的控制,我得到预期的HTTP/1.1 200 OK响应,但是当我将HTTP动词从GET更改为HEAD时,我收到一个HTTP/1.1 404 Not Found响应。

将断点放入我的ImageController.Get()方法中后,我注意到只有HTTP GET请求触及了它。

然后在Global.asax.csApplication_BeginRequest内部放置一个断点,HTTP GETHTTP HEAD请求都会触发断点。

当请求是HTTP HEAD我有Request对象的下列属性:

RawUrl "/images/1809x1280/image1.jpg" string

Url {http://localhost/image/get/image1.jpg/1809/1280} System.Uri

这是正确的,表明web.config重写规则已经踢了,但是ImageController.Get()从未被击中。

在这一点上,它似乎是routes.MapRoute()的问题,但我不知道如何去查找和调查它。

回答

0

显然比我想象的要简单。

我到处除了看我这是装饰着只有[HttpGet]属性控制器动作,替换以下列有固定它:

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)] 
public ActionResult Get(string imageName){ 
... 
} 
+0

你烤你的蛋糕和吃它太...哈哈哈 –

+0

这似乎很so :) –