浏览WebBrowser控件中的Angular应用程序

时间:2017-10-23 14:27:16

标签: node.js angular winforms webbrowser-control angular-cli

这是一种奇怪的场景,但我想在WinForm应用程序的WebBrowser控件中查看我们的Angular应用程序。

Angular应用程序使用npm run startng serve在本地运行,这在我的系统上的所有浏览器(Chrome,FF,Edge,IE)中运行良好。

通过WebBrowser控件访问网站(http://localhost:4200/login)时,我会不断检索状态404.

我已经尝试过搜索有关Angular网络服务器的问题和可访问性的一些文档,但无法找到任何内容。我最好的猜测是网站在某种node.js进程中运行,WinForm应用程序无法访问它,或者正确地路由到Angular应用程序,但我找不到任何来源这个理论。

你可能想知道我为什么试图让它工作,好吧,我想知道Navigated - 事件是否仍然出现在我们的新Angular应用程序中,因为它似乎不是&#39 ;在我们的AngularJS应用程序中触发此事件的情况。所以它只是一个测试/ poc应用程序。

旁注:WebBrowser控件能够连接到我们拥有的AngularJS应用程序(也在本地运行),但是这个应用程序通过IIS Express运行。这就是我认为这可能是网络服务器/路由问题的原因。

到目前为止,我已经建立了更多细节。

Form1.Designer.cs

// All of the other WinForm stuff
private System.Windows.Forms.WebBrowser v2Browser;

Form1.cs

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        v2Browser.Navigate("http://localhost:4200/login");
    }

    private void V2BrowserNavigated(object sender, WebBrowserNavigatedEventArgs e)
    {
        System.Diagnostics.Trace.Write($"v2 has navigated to `{e.Url}`." + Environment.NewLine);
    }
}

启动网络服务器的NG命令

> ng serve --watch --sourcemap=false

** NG Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200 **
Date: 2017-10-23T14:43:54.585Z
Hash: 54a4c907e66e478979a5
Time: 26736ms

请求(通过Fiddler捕获)

GET http://localhost:4200/login HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)
If-None-Match: W/"654-dUFWfqPxZMcM1Ej8ZbZ0A8+KsiA"
Host: localhost:4200
Connection: Keep-Alive

回应(通过Fiddler)

HTTP/1.1 404 Not Found
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Security-Policy: default-src 'self'
X-Content-Type-Options: nosniff
Content-Type: text/html; charset=utf-8
Content-Length: 144
Date: Mon, 23 Oct 2017 14:44:51 GMT
Connection: keep-alive

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /login</pre>
</body>
</html>

所以我收到的错误并不多,只有404回复。

1 个答案:

答案 0 :(得分:0)

考虑到我无法通过ng serve访问托管应用程序,我决定只通过ng build构建应用程序,并将新的IIS网站指向输出文件夹。

这就像一个魅力,所以它解决了我的问题,但并不是我真正想要的。

在使用IIS网站之后,我还发现我的问题的解决方案是使用CLI中的--host参数。

ng serve --port 8080 --host 0.0.0.0 --disable-host-check

将在本地运行该网站,您可以通过不使用localhost连接到该网站。解决了我的问题!