[WinForm]项目开发中WebBrowser使用小计

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1.

[PermissionSet(SecurityAction.Demand, Name ="FullTrust")]

[ComVisibleAttribute(true)]publicpartialclassfrmWebData : Form

{publicfrmWebData()

{

InitializeComponent();

}PRotectedoverridevoidOnLoad(EventArgs e)

{

wbService.ObjectForScripting =this;base.OnLoad(e);

}

}

2.后台调用javascript脚本

<script type="text/Javascript"language="javascript">functionErrorMessage(message) {

document.getElementById("error").innerText = message;

}

</script>

后台代码

staticstringErrorMsg =string.Empty;privatevoidwbService_DocumentCompleted(objectsender, WebBrowserDocumentCompletedEventArgs e)

{if(!string.IsNullOrEmpty(ErrorMsg))

wbService.Document.InvokeScript("ErrorMessage",newobject[1] {string.Format("操作失败,原因:{0}!", ErrorMsg) });

}

3.JavaScript脚本调用后台方法

脚本代码

<div id="content">

<h2 id="error">

操作正在响应中.....</h2>

<divclass="utilities">

<aclass="button right"

onclick="window.external.DoSvrWebDbBack()">

刷新</a>

<!--<aclass="button right"onclick="window.external.NavigateToLogin()">重新登录</a>-->

<divclass="clear">

</div>

</div>

</div>

后台代码

publicvoidDoSvrWebDbBack()

{try{

}catch(TimeoutException)

{

ErrorMsg ="超时,请稍候再尝试!";

}catch(Exception ex)

{

ErrorMsg = ex.Message.ToString();

}

}

4.设置cookie

Cookie _cookie = BaseWinForm.LoginMessage.sessionID2;

InternetSetCookie(BaseWinForm.LoginMessage.SvrWebDbBack,"asp.net_SessionId", _cookie.Value);

wbService.Navigate(BaseWinForm.LoginMessage.SvrWebDbBack,null,null,string.Format("Referer:{0}", BaseWinForm.LoginMessage.SvrWebDbLoingUrl));

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError =true)]publicstaticexternboolInternetSetCookie(stringurlName,stringcookieName,stringcookieData);

4.请求链接获取返回处理

publicclassHttpWebRequestToolV2

{publicdelegateHttpWebRequest RequestRule(stringurl);/// <summary>/// 发起HttpWebResponse请求/// </summary>/// <param name="url">请求连接</param>/// <param name="credentials">请求参数</param>/// <param name="httpWebRequestRule">请求设置『委托』,当委托等于NULL的时候,默认请求;否则使用所设置的HttpWebRequest</param>/// <returns>HttpWebResponse</returns>publicstaticHttpWebResponse CreateHttpWebRequest(stringurl,byte[] credentials, RequestRule httpWebRequestRule)

{if(string.IsNullOrEmpty(url))thrownewArgumentNullException("url");

HttpWebRequest _request =null;if(httpWebRequestRule !=null)

{

_request = httpWebRequestRule(url);

}else{

_request = WebRequest.Create(url)asHttpWebRequest;

_request.Method ="POST";

_request.ContentType ="application/x-www-form-urlencoded";

_request.CookieContainer =newCookieContainer();

}if(credentials !=null)

{

_request.ContentLength = credentials.Length;using(var requestStream = _request.GetRequestStream())

{

requestStream.Write(credentials, 0, credentials.Length);

}

}return_request.GetResponse()asHttpWebResponse;

}/// <summary>/// 创建验证凭证/// eg:/// IDictionary<string, string> _requestCredentials = new Dictionary<string, string>();///_requestCredentials.Add("UserName", _userName);///_requestCredentials.Add("PassWord", _userPwd);///_requestCredentials.Add("MacAddress", _macAddress);///byte[] _credentials = HttpWebRequestToolV2.CreateCredentials(_requestCredentials, Encoding.UTF8);/// </summary>/// <returns></returns>publicstaticbyte[] CreateCredentials(IDictionary<string,string> credentials, Encoding encoding)

{if(credentials ==null)thrownewArgumentNullException("credentials");if(credentials.Count == 0)thrownewArgumentException("credentials");if(encoding ==null)thrownewArgumentNullException("encoding");

StringBuilder _credentials =newStringBuilder();foreach(KeyValuePair<string,string> credentialincredentials)

{

_credentials.AppendFormat("{0}={1}&", credential.Key, credential.Value);

}string_credentialsString = _credentials.ToString().Trim();int_endIndex = _credentialsString.LastIndexOf('&');if(_endIndex != -1)

_credentialsString = _credentialsString.Substring(0, _endIndex);returnencoding.GetBytes(_credentialsString);

}

使用示例

publicstaticHttpWebRequest RequestSetting(stringurl)

{

HttpWebRequest _request =null;

_request = WebRequest.Create(url)asHttpWebRequest;

_request.Method ="POST";

_request.ContentType ="application/x-www-form-urlencoded";

_request.Timeout = 1000 * 10;//超时五秒_request.CookieContainer =newCookieContainer();return_request;

}/// <summary>/// 登录web网页验证/// </summary>/// <param name="url">超链接</param>/// <param name="_userName">用户名</param>/// <param name="_userPwd">密码</param>/// <param name="_macAddress">MAC地址</param>/// <param name="sessionID">会话</param>/// <returns>网页登录验证是否成功『失败,将抛出网页验证验证失败信息』</returns>publicboolProcessRemoteLogin(stringurl,string_userName,string_userPwd,string_macAddress,outCookie sessionID)

{bool_checkResult =false;string_errorMessage =string.Empty;//--------------------创建登录凭证--------------------IDictionary<string,string> _requestCredentials =newDictionary<string,string>();

_requestCredentials.Add("UserName", _userName);

_requestCredentials.Add("PassWord", _userPwd);

_requestCredentials.Add("MacAddress", _macAddress);byte[] _credentials = HttpWebRequestToolV2.

CreateCredentials

(_requestCredentials, Encoding.UTF8);//-----------------------------------------------------CookieCollection _cookie =null;/**LoginType 1:成功 0:失败*Err 失败原因*/using(HttpWebResponse _httpRespone = HttpWebRequestToolV2.

CreateHttpWebRequest

(url, _credentials, RequestSetting))

{

_cookie =newCookieCollection();if(_httpRespone.Cookies.Count > 0)

_cookie.Add(_httpRespone.Cookies);

}//-------------------------------------------------------Cookie _loginType = _cookie["LoginType"];

sessionID = _cookie["ASP.NET_SessionId"];

Cookie _err = _cookie["Err"];if(_loginType !=null&& _err !=null&& sessionID !=null)

{

_checkResult = _loginType.Value.Equals("1");if(!_checkResult)

_errorMessage = HttpUtility.UrlDecode(_err.Value);

}else{

_errorMessage ="Web服务异常,请稍候在试!";

}if(!string.IsNullOrEmpty(_errorMessage))thrownewException(_errorMessage);return_checkResult;

}

 

5.从WebBrowser中获取CookieContainer

/// <summary>/// 从WebBrowser中获取CookieContainer/// </summary>/// <param name="webBrowser">WebBrowser对象</param>/// <returns>CookieContainer</returns>publicstaticCookieContainer GetCookieContainer(thisWebBrowser webBrowser)

{if(webBrowser ==null)thrownewArgumentNullException("webBrowser");

CookieContainer _cookieContainer =newCookieContainer();string_cookieString = webBrowser.Document.Cookie;if(string.IsNullOrEmpty(_cookieString))return_cookieContainer;string[] _cookies = _cookieString.Split(';');if(_cookies ==null)return_cookieContainer;foreach(stringcookieStringin_cookies)

{string[] _cookieNameValue = cookieString.Split('=');if(_cookieNameValue.Length != 2)continue;

Cookie _cookie =newCookie(_cookieNameValue[0].Trim().ToString(), _cookieNameValue[1].Trim().ToString());

_cookieContainer.Add(_cookie);

}return_cookieContainer;

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航