为什么HTTP HEET请求没有被routes.MapRoutes()捕获,而HTTP GET是?

时间:2016-09-08 12:58:04

标签: c# asp.net .net asp.net-mvc url-rewriting

我有一个处理图像请求的.NET控制器。

web.config中有一个URL重写规则,用于转换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请求时,操作已正确路由到正确的控件,我得到了预期的HTTP/1.1 200 OK响应,但是当我将HTTP动词从GET更改为{时{1}}我收到HEAD回复。

在我的HTTP/1.1 404 Not Found方法中放置了一个断点后,我注意到只有ImageController.Get()请求正在点击它。

然后在HTTP GET的{​​{1}}内放置一个断点,Application_BeginRequestGlobal.asax.cs请求都会遇到断点。

当请求为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似乎存在问题,但我不确定如何进行调查。

1 个答案:

答案 0 :(得分:0)

显然这比我想象的要简单。

除了查看仅使用[HttpGet]属性修饰的控制器操作外,我向所有地方看了一下,用以下内容替换了它已修复它:

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