简体   繁体   English

将Windows窗体应用程序转换为Asp Lr控制台应用程序

[英]Convert windows form application to Asp lr console application

I am using vs 2017rc and I have compatibility issues. 我正在使用vs 2017rc,并且存在兼容性问题。 I can't add windows form doll to my project and when I try to convert the code from win forms to Asp k get issues. 我无法将Windows form doll添加到我的项目中,并且当我尝试将代码从win形式转换为Asp k时遇到问题。 Maybe I am doing it wrong but it seem to work on vs2015. 也许我做错了,但它似乎可以在vs2015上使用。

Please I need help to solve this. 请我帮忙解决这个问题。 Maybe I am doing it wrong. 也许我做错了。 See the code below. 请参见下面的代码。

using DotNetBrowser;
using DotNetBrowser.WinForms;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;

namespace GetAjaxResponseBodySample
{
public partial class Form1 : Form
{
    private static List<string> ajaxUrls = new List<string>();
    private WinFormsBrowserView browserView;

    public Form1()
    {
        InitializeComponent();
        browserView = new WinFormsBrowserView();
        browserView.Browser.Context.NetworkService.ResourceHandler = new AjaxResourceHandler();
        browserView.Browser.Context.NetworkService.NetworkDelegate = new AjaxNetworkDelegate();
        Controls.Add(browserView);
        browserView.Browser.LoadURL("http://www.w3schools.com/xml/ajax_examples.asp");
    }

    private class AjaxResourceHandler : ResourceHandler
    {
        public bool CanLoadResource(ResourceParams parameters)
        {
            if (parameters.ResourceType == ResourceType.XHR)
            {
                Debug.WriteLine("Intercepted AJAX request: " + parameters.URL);
                ajaxUrls.Add(parameters.URL);
            }
            return true;
        }
    }

    private class AjaxNetworkDelegate : DefaultNetworkDelegate
    {
        public override void OnDataReceived(DataReceivedParams parameters)
        {
            if (ajaxUrls.Contains(parameters.Url))
            {
                Debug.WriteLine("Captured response for: " + parameters.Url);
                Debug.WriteLine("MimeType = " + parameters.MimeType);
                Debug.WriteLine("Charset = " + parameters.Charset);
                PrintResponseData(parameters.Data);
            }
        }

        private void PrintResponseData(byte[] data) {
            Debug.WriteLine("Data = ");
            var str = Encoding.Default.GetString(data);
            Debug.WriteLine(str);
        }
    }
}

Am not concerned with the browser view... I already get the Jason I need from the Ajax response body. 不关心浏览器视图...我已经从Ajax响应正文中获得了所需的Jason。

It is possible to use Browser in a headless mode without creating BrowserView at all. 可以完全不创建BrowserView地以无头模式使用Browser。

The following sample code works in the web application on VS2017rc with ASP.NET Core Web Application (.NET Framework) or ASP.NET Web Application (.NET Framework). 以下示例代码可在带有ASP.NET Core Web应用程序(.NET Framework)或ASP.NET Web应用程序(.NET Framework)的VS2017rc上的Web应用程序中工作。 Please take into account that it is necessary to Dispose browser after the response body has been captured. 请考虑到在捕获响应正文之后有必要处置浏览器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using DotNetBrowser;
using System.Diagnostics;
using System.Text;

namespace WebApplication7.Controllers
{
    public class HomeController : Controller
    {
        private static List<string> ajaxUrls = new List<string>();
        Browser browser;        

        public string Index()
        {
            Init();
            return "Test page";
        }        

        private void Init()
        {
            browser = BrowserFactory.Create();
            browser.Context.NetworkService.ResourceHandler = new AjaxResourceHandler();
            browser.Context.NetworkService.NetworkDelegate = new AjaxNetworkDelegate();

            browser.LoadURL("https://www.w3schools.com/xml/ajax_examples.asp");
        }       

        private class AjaxResourceHandler : ResourceHandler
        {
            public bool CanLoadResource(ResourceParams parameters)
            {
                if (parameters.ResourceType == ResourceType.XHR)
                {
                    Debug.WriteLine("Intercepted AJAX request: " + parameters.URL);
                    ajaxUrls.Add(parameters.URL);
                }
                return true;
            }
        }

        private class AjaxNetworkDelegate : DefaultNetworkDelegate
        {
            public override void OnDataReceived(DataReceivedParams parameters)
            {
                if (ajaxUrls.Contains(parameters.Url))
                {
                    Debug.WriteLine("Captured response for: " + parameters.Url);
                    Debug.WriteLine("MimeType = " + parameters.MimeType);
                    Debug.WriteLine("Charset = " + parameters.Charset);
                    PrintResponseData(parameters.Data);
                }
            }

            private void PrintResponseData(byte[] data)
            {
                Debug.WriteLine("Data = ");
                var str = Encoding.UTF8.GetString(data);
                Debug.WriteLine(str);
            }
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM