asp.net-mvc – asp.net mvc应用程序中的Web浏览器托管问题
在我的Asp.Net MVC Web应用程序中,我必须通过网站从站点获取数据.对于报废数据,我需要登录该站点,然后通过单击菜单选项卡访问站点,然后从该页面我需要废弃数据.报废的网站包含2个框架.我之前通过
Windows Web浏览器控件在我的一个Windows项目中实现了Web报废.
我按照以下link将Web浏览器控件集成到我的Web应用程序中.在视觉工作室环境下一切正常,我通过网络浏览器从网站上删除我的数据.但是当我尝试托管应用程序时,它没有按预期工作. Web浏览器控件未加载.我搜索了解决方案,但还没有得到可行的解决方案.我试图通过iframe实现相同的功能,并使用Silverlight Webbrowser控件和使用javascript来实现登录事件,但由于跨域问题,它也因访问拒绝而失败. 那么有没有办法通过loggin将数据废弃到asp.net web应用程序中的站点.我可以将我的Windows应用程序作为ActiveX控件使用它. ActiveX会有跨浏览器问题吗? 任何帮助将不胜感激 提前致谢 解决方法
正如评论中所建议的那样,使用网络浏览器的方法似乎很重,并且会受到其他环境限制.您最好的方法是创建一个单独的,可测试的存储库来抓取数据 – 如果您确实需要,可以按需或使用蜘蛛方法(并且目标数据不会更改).
是的,如果您尝试将其设为ActiveX,则不同的浏览器会出现问题.安全可能不允许.这里有很多因素;如果您的环境不受控制,这不是一个很好的选择. 假设您采用按需方法,我强烈建议您创建一个可以参考的Web服务或类.然后,您可以使用开源解析器服务器端,例如: > CsQuery如果文件格式不正确,或者, 基本上,您需要进行身份验证,存储身份验证cookie,最后通过填充了身份验证cookie的第二个请求加载目标文档.将该页面提供给您的解析器(CsQuery或Fizzler). 执行登录的示例如下: private HttpWebRequest PerformLoginRequest(CookieContainer container) { var request = (HttpWebRequest) WebRequest.Create(YOUR_POST_URL); request.Method = "POST"; request.CookieContainer = container; _logger.DebugFormat("Attempting login for '{0}'",_username); var encoding = new ASCIIEncoding(); // assumes the un/pw is stored in a field var credentials = string.Format("username={0}&password={1}",_username,_password); byte[] data = encoding.GetBytes(credentials); request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; using (var requestStream = request.GetRequestStream()) { try { requestStream.Write(data,data.Length); } catch (Exception e) { _logger.Error("Error in login attempt.",e); } finally { requestStream.Close(); } } return request; } 返回的cookie容器将具有一个您需要解析的set-cookie,以便后续请求正确显示认证位.我不得不这样做,并在我在某处找到的代码处理了但是现在找不到引用.它可能看起来像这样(这里的解释Set-Cookie): private static CookieContainer ProcessCookieContainer(HttpWebRequest request,CookieContainer container) { var response = (HttpWebResponse) request.GetResponse(); var cookierReader = new StreamReader(response.GetResponseStream()); string htmldoc = cookierReader.ReadToEnd(); var cookieHeader = response.GetResponseHeader("Set-Cookie"); response.Close(); container = new CookieContainer(); foreach (var cookie in cookieHeader.Split(',')) { // these are ; seperated name/value pairs var split = cookie.Split(';'); string name = split[0].Split('=')[0]; string value = split[0].Split('=')[1]; // create the cookie with the domain var c = new Cookie(name,value) {Domain = "YourCookieDomain.com"}; container.Add(c); } return container; } 要加载文档来解析它,您可能会执行以下操作: public string GetValueFromSomePage(int first,string second) { var container = new CookieContainer(); // do login var request = PerformLoginRequest(container); // chew on cookies container = ProcessCookieContainer(request,container); var result = string.Empty; var requestUrl = string.Format("http://YourUrlWithParams.com/?first={0}&second={1}",123,"abc"); var request = (HttpWebRequest)WebRequest.Create(requestUrl); request.CookieContainer = container; using (var serverResponse = (HttpWebResponse)request.GetResponse()) { try { var reader = new StreamReader(serverResponse.GetResponseStream()); var responseDoc = new CQ(reader); // do something with CSS selectors... result = responseDoc["input[name=name]"].FirstElement().Value; } catch (Exception e) { _logger.Error("Error fetching data.",e); } finally { serverResponse.Close(); } } return result; } 我希望这有帮助.这里有一些活动部分,但您可能期望已经考虑到任务的性质. 干杯. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – IE10 SCRIPT5009:’__doPostBack’未定义
- ASP.NET性能在32位/ 64位服务器之间降低
- asp.net-mvc-3 – 在WebGrid中向Header添加自定义html
- asp.net – 处理通用http处理程序中的会话超时
- 如何识别ASP.NET Web表单和ASP.NET MVC网站?
- asp.net应用程序中的内存泄漏 – W3WP和第2代堆继续增长,直
- 使用asp.net标识更新用户角色
- asp.net-mvc – ASP.NET MVC中声明性HTML帮助程序和HTML帮助
- asp.net-mvc – mvc.net验证是否支持ValidationGroup的概念
- asp.net-mvc-4 – 使用基本HTTP身份验证的MVC4 app WebApi中
- asp.net – 503 – 服务器不可用 – .Net 2.0和4
- asp.net-mvc – ASP.NET MVC – 本地化路由
- 如何使用MSBuild发布Asp.NET Web应用程序?
- asp.net – 如何以完全信任的方式部署IIS ASP .N
- 如何使用ASP.NET中的C#代码以PDF,HTML和DOC格式导
- VS2017中使用组合项目_windows服务+winform管理_
- 如果用户在线,如何检入ASP.NET?
- asp.net – 更改User-Agent标头触发表单身份验证
- asp.net – MVC3 Razor – 到期页面
- asp.net – 我如何找出哪些服务器主机LDAP在我的