为什么HTTP HEAD请求没有被routes.MapRoutes()捕获而HTTP GET被捕获?
本文关键字:HTTP GET routes 请求 HEAD 为什么 MapRoutes | 更新日期: 2023-09-27 18:06:16
我有一个。net控制器来处理图像请求。
web上有一个URL重写规则。配置转换http://localhost/images/1809x1280/image1.jpg
to http://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
请求时,该操作被正确路由到正确的控件,并且我得到预期的HTTP/1.1 200 OK
响应,但是当我将HTTP动词从GET
更改为HEAD
时,我收到HTTP/1.1 404 Not Found
响应。
在我的ImageController.Get()
方法中放置了一个断点,我注意到只有HTTP GET
请求击中了它。
然后在Global.asax.cs
的Application_BeginRequest
中放置一个断点,HTTP GET
和HTTP 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()
在这一点上的一个问题,但我不知道如何去调查它。
显然比我想象的要简单。
我到处看,除了看我的控制器动作,它只装饰了[HttpGet]
属性,用下面的替换已经修复了它:
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]
public ActionResult Get(string imageName){
...
}