使用 CefSharp 处理 HEAD 请求

问题描述 投票:0回答:1

我正在评估 CefSharp 来构建一个基本上只包装 Web 应用程序的桌面应用程序。要从文件系统访问文件,我想拦截 Web 应用程序的 http 请求。

我改编了最小示例并安装了一个

CustomRequestHandler
,它覆盖了
GetResourceRequestHandler
,就像文档中针对请求拦截所做的那样。

现在,我想回答来自网络应用程序的 HEAD 请求(该应用程序需要从文件末尾读取一个块 - 所以我首先需要总大小)。但到目前为止我还没有找到方便的方法。

我尝试了以下方法:

protected override IResourceHandler GetResourceHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request)
{
    if (request.Method == "HEAD")
    {                
        var handler = ResourceHandler.FromStream(Stream.Null, mimeType: "application/octet-stream");
        var total = new System.IO.FileInfo(_filename).Length;
        handler.Headers.Set("Content-Length", $"{total}");

        return handler;
    }
    return ResourceHandler.ForErrorMessage("Method not allowed", HttpStatusCode.MethodNotAllowed);
}

在浏览器中,Content-Length 标头设置为零(对于零长度流来说是正确的)。至于现在,我想我需要实现一个自定义的 ResourceHandler ,它允许设置 Content-Length 标头。但我想知道在发送实际响应之前,标头是否已进一步“更正”。任何提示表示赞赏。

c# .net cefsharp http-method
1个回答
0
投票

显然我忽略了显而易见的事情。我只需要设置属性

ResponseLength
,而不是编写标题。该方法现在看起来像这样:

protected override IResourceHandler GetResourceHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request)
{
    if (request.Method == "HEAD")
    {                
        var handler = ResourceHandler.FromStream(Stream.Null, mimeType: "application/octet-stream");
        var total = new System.IO.FileInfo(_filename).Length;
        handler.ResponseLength = total;

        return handler;
    }
    return ResourceHandler.ForErrorMessage("Method not allowed", HttpStatusCode.MethodNotAllowed);
}
© www.soinside.com 2019 - 2024. All rights reserved.