如何在CefSharp中确定服务器的响应是404?

时间:2016-04-25 16:31:26

标签: wpf cefsharp

我正在使用CefSharp的WPF控件。我需要知道我发出的请求何时收到http状态代码为404的响应。

我注意到CefSharp有LoadError事件,但只有当域无法完全解析时才会触发(例如,如果我去www.sdfhjkhajsdf.com)。它不适用于域存在的时间,但是您请求的页面不起作用。

1 个答案:

答案 0 :(得分:1)

这是一个非常古老的问题。 CefSharp有很多很棒的更新,所以我希望这有助于其他人像我一样搜索。不要恨我,因为我的片段是在VB.NET中。 ;)

我正在做的是记录任何不是200响应的内容。对于我的应用程序,我打开了所请求页面的新表单,因此我通过查看ReferrerUrl属性将我的注意力集中在初始页面请求上。显然,您可以删除该部分以提醒所有请求。

当您最初实施ChromiumWebBrowser时,需要为您的实施设置RequestHandler

Me.chromeBrowser = New CefSharp.WinForms.ChromiumWebBrowser(uri)
Me.chromeBrowser.RequestHandler = New CefBasicRequestHandler()
Me.Controls.Add(Me.chromeBrowser)

CefSharp发布了一个可以使用的默认实现,只是覆盖OnResourceResponse

Imports System.Security.Cryptography.X509Certificates
Imports CefSharp

Public Class CefBasicRequestHandler
  Inherits CefSharp.Handler.DefaultRequestHandler

  Private Shared ReadOnly Logger As log4net.ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

  Public Overrides Function OnResourceResponse(browserControl As IWebBrowser, browser As IBrowser, frame As IFrame, request As IRequest, response As IResponse) As Boolean
    If String.IsNullOrWhiteSpace(request.ReferrerUrl) Then ' this is the first request of the page
        Dim method As String = "OnResourceResponse()."
        Dim requestOverview As String = $"[{response.StatusCode}] [{request.Url}]"
        Logger.Info($"{method} {requestOverview}")

        If response.StatusCode <> 200 Then
            Logger.Warn($"{method} {requestOverview}")
        End If
    End If

    Return MyBase.OnResourceResponse(browserControl, browser, frame, request, response)
  End Function
End Class