如何在WebBrowser控件中获取当前状态码?

3
我需要从WebBrowser中加载的页面获取HTTP状态码,我最终使用了以下解决方案:
我使用WebBrowser ActiveXInstance实例中的NavigateError事件。但是它不能很好地工作:只有在出现错误时(像方法名称所示)才能得到状态代码,如果页面无法加载并且用户wb.Refresh(),那么加载就会成功,而我只存储旧的HTTP状态错误代码,因为成功加载不会改变我的HTTP状态代码。我该如何解决这个问题?
public doSomething()
{
    SHDocVw.WebBrowser axBrowser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
    axBrowser.NavigateError += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(axbrowser_navigatorError);
}

public void axbrowser_navigatorError(object pDIsp, ref object URL, ref object frame, ref object statusCode, ref bool Cancel)
{
    statuscodeLabel.Text = statusCode.ToString();
    int.TryParse(statusCode.ToString(), out httpCode);
}

1
当没有错误时,NavigateComplete2会触发。因此,请使用它来重置您的状态代码。 - Hans Passant
使用这个方法,我可以假设没有错误发生,但无法获取HTTP状态码,因为它的参数是object pDisp,ref object url,其中pDsip是一个WebBrowser实例(在没有我的axbrowser_navigatorError()的情况下无法获取HTTP状态码),而url是我们正在处理的URL,对吗? - Jack
看起来只是WebBrowser的DocumentCompleted等效部分... - Jack
2个回答

1

WebBrowserRefreshNavigate/Navigate2 有很大的不同。 刷新没有触发 NavigateComplete2 事件。我认为,除非你诉诸于一些下级 APP handler 钩子,否则无法获取刷新的状态代码。 相关信息:Wpf WebBrowser Refresh


0

这是哪个类的方法?我在WebBrowser(SHDocVw.WebBrowser)webBrowser1.ActiveXInstance中都找不到它。这个链接 msdn.microsoft.com/en-us/library/system.web.ui.page.loadcomplete(v=vs.110).aspx 就是你说的那个吗? - Jack
你可以从工具箱中使用WebBrowser控件。这个控件包装了ActiveX,但添加了更多的控制。 - Ross Bush
这就是我正在使用的东西。请注意在doSomething()函数中的强制转换。你无法仅通过WebBrowser获取HTTP状态码。 - Jack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接