【问题标题】:Why HTTP HEAD Request is not caught by routes.MapRoutes() while HTTP GET is?为什么 HTTP HEAD 请求没有被 routes.MapRoutes() 而 HTTP GET 捕获?
【发布时间】:2017-01-16 10:14:09
【问题描述】:

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

web.config 中有一个 URL 重写规则将http://localhost/images/1809x1280/image1.jpg 转换为 给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 时,我收到了一个@ 987654329@回复。

在我的 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() 似乎有问题,但我不知道如何着手调查。

【问题讨论】:

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


    【解决方案1】:

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

    除了查看仅用[HttpGet] 属性装饰的控制器操作外,我到处查看,将其替换为以下已修复它:

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

    【讨论】:

    • 你烤你的蛋糕,它也吃...哈哈哈
    • 看起来很不错:)
    猜你喜欢
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多