国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

c#使用webView2 訪問本地靜態(tài)html資源跨域Cors問題 (附帶代理服務helper幫助類)

這篇具有很好參考價值的文章主要介紹了c#使用webView2 訪問本地靜態(tài)html資源跨域Cors問題 (附帶代理服務helper幫助類)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

背景

在瀏覽器中訪問本地靜態(tài)資源html網頁時,可能會遇到跨域問題如圖。

c#使用webView2 訪問本地靜態(tài)html資源跨域Cors問題 (附帶代理服務helper幫助類)

?

是因為瀏覽器默認啟用了同源策略,即只允許加載與當前網頁具有相同源(協(xié)議、域名和端口)的內容。

WebView2默認情況下啟用了瀏覽器的同源策略,即只允許加載與主機相同源的內容。所以如果我們把靜態(tài)資源發(fā)布到iis或者通過node進行啟動就可以看到不跨域了。

解決方案

  1. 使用CORS(Cross-Origin Resource Sharing):如果你有控制服務器端,可以在服務器端配置CORS來允許跨域請求。在服務器端的響應頭中添加相關的CORS頭部信息,例如允許訪問的域名、請求方法等,以允許JavaScript跨域訪問。

  2. 使用WebView2的 AddWebResourceRequestedFilter 方法:通過添加Web資源請求過濾器,你可以攔截WebView2控件中加載的資源請求,并進行處理。在攔截到JavaScript文件請求時,修改響應頭部信息,添加Access-Control-Allow-Origin頭部來解決跨域問題。
  3. 使用代理服務器:你可以在本地啟動一個代理服務器,將WebView2控件的請求轉發(fā)到代理服務器上,然后代理服務器再將請求發(fā)送到原始服務器并返回響應。在代理服務器上你可以設置合適的CORS頭部信息來解決跨域問題。

思路

  1. 首先,確保你已經安裝了Microsoft.Web.WebView2。你可以在Visual Studio的NuGet包管理器中搜索并安裝此包。

  2. 然后通過HttpListener進行文件夾的靜態(tài)資源進行代理發(fā)布
  3. 然后通過webview2進行導航訪問即可我們會發(fā)現跨域問題已經解決

    c#使用webView2 訪問本地靜態(tài)html資源跨域Cors問題 (附帶代理服務helper幫助類)

    ?

代碼

?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinApp.View
{
    public partial class Cors : Form
    {
        // 創(chuàng)建HttpListener對象并指定綁定的端口
        HttpListener _listener;
        string _folderPath;
        string _rootDirectory;

        public Cors()
        {
            InitializeComponent();

            // 初始化
            InitializeAsync();
        }

        private async void InitializeAsync()
        {
            // 獲取本地靜態(tài)資源的路徑             
            _rootDirectory = AppDomain.CurrentDomain.BaseDirectory + "offline-exam-player"; //設置本地離線播放器為代理服務
            _rootDirectory = @"C:\Users\admin\Documents\WeChat Files\wxid_1ofgk575ybpt22\FileStorage\File\2024-02\ng-alain8\ng-alain8/";
            _folderPath = @"C:\Users\admin\Documents\WeChat Files\wxid_1ofgk575ybpt22\FileStorage\File\2024-02\ng-alain8\ng-alain8/index.html";

            _listener = new HttpListener();
            // 設置代理服務器的監(jiān)聽地址和端口號
            _listener.Prefixes.Add("http://localhost:8080/");
            _listener.Start();

            // 啟動代理服務器
            Task.Run(() =>
            {
                // 啟動代理服務器
                ProcessRequests();
            });

            // 停止代理服務器(這里演示就不停止了)
            //server.Stop();
        }

        private void ProcessRequests()
        {
            try
            {
                while (_listener.IsListening)
                {
                    HttpListenerContext context = _listener.GetContext();
                    string requestPath = context.Request.Url.AbsolutePath;
                    string filePath = _rootDirectory + requestPath;

                    // Serve the requested file if it exists
                    if (System.IO.File.Exists(filePath))
                    {
                        string extension = System.IO.Path.GetExtension(filePath);
                        string contentType;
                        switch (extension)
                        {
                            case ".html":
                                contentType = "text/html";
                                break;
                            case ".js":
                                contentType = "application/javascript";
                                break;
                            case ".less":
                            case ".css":
                                contentType = "text/css";
                                break;
                            case ".svg":
                                contentType = "image/svg+xml";
                                break;
                            default:
                                contentType = "application/octet-stream";
                                break;
                        }

                        context.Response.ContentType = contentType;
                        //context.Response.ContentType = "text/html";
                        byte[] responseBuffer = System.IO.File.ReadAllBytes(filePath);
                        context.Response.OutputStream.Write(responseBuffer, 0, responseBuffer.Length);
                        context.Response.Close();
                    }
                    else
                    {
                        // Return a 404 response if the file does not exist
                        context.Response.StatusCode = 404;
                        context.Response.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                // Handle any exceptions that may occur
                Console.WriteLine(ex.ToString());
            }
        }


        private async void Cors_Load(object sender, EventArgs e)
        {
            //本地靜態(tài)資源,直接訪問會出現跨院,如果通過iis訪問則不會跨域;

            // 確保CoreWebView2運行時已準備就緒
            await webView21.EnsureCoreWebView2Async();

            // 在WebView2控件中加載URL
            //webView21.CoreWebView2.Navigate(_folderPath);            
            webView21.CoreWebView2.Navigate("http://localhost:8080/" + "index.html");
        }

    }
}

?

代理服務幫助類代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace WinApp.Until
{
    public class ProxyHelper
    {
        private readonly HttpListener _listener;
        private readonly string _rootDirectory;

        /// <summary>
        /// 實例化
        /// </summary>
        /// <param name="serviceIp">代理的ip地址帶端口,例子:http://localhost:8080/ </param>
        /// <param name="folderPath">需要代理的文件夾,例子:AppDomain.CurrentDomain.BaseDirectory + "offline-exam-player" </param>
        public ProxyHelper(string serviceIp, string folderPath)
        {
            _rootDirectory = folderPath;

            _listener = new HttpListener();
            _listener.Prefixes.Add(serviceIp);
        }

        public async Task Start()
        {
            _listener.Start();

            await Task.Run(() => ProcessRequests());

        }

        public void Stop()
        {
            _listener.Stop();
            _listener.Close();
            Console.WriteLine("Proxy server stopped.");
        }

        private void ProcessRequests()
        {
            try
            {
                while (_listener.IsListening)
                {
                    HttpListenerContext context = _listener.GetContext();
                    string requestPath = context.Request.Url.AbsolutePath;
                    string filePath = _rootDirectory + requestPath;

                    // Serve the requested file if it exists
                    if (System.IO.File.Exists(filePath))
                    {
                        string extension = System.IO.Path.GetExtension(filePath);
                        string contentType;
                        switch (extension)
                        {
                            case ".html":
                                contentType = "text/html";
                                break;
                            case ".js":
                                contentType = "application/javascript";
                                break;
                            case ".less":
                            case ".css":
                                contentType = "text/css";
                                break;
                            case ".svg":
                                contentType = "image/svg+xml";
                                break;
                            default:
                                contentType = "application/octet-stream";
                                break;
                        }

                        context.Response.ContentType = contentType;
                        //context.Response.ContentType = "text/html";
                        byte[] responseBuffer = System.IO.File.ReadAllBytes(filePath);
                        context.Response.OutputStream.Write(responseBuffer, 0, responseBuffer.Length);
                        context.Response.Close();
                    }
                    else
                    {
                        // Return a 404 response if the file does not exist
                        context.Response.StatusCode = 404;
                        context.Response.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                // Handle any exceptions that may occur
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

?

結語

最后如果對于不多的跨域js文件,可以把js的代碼內嵌到index.html頁面實現。就是<script>跨域js內容</script>文章來源地址http://www.zghlxwxcb.cn/news/detail-833132.html

到了這里,關于c#使用webView2 訪問本地靜態(tài)html資源跨域Cors問題 (附帶代理服務helper幫助類)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • SpringBoot代理訪問本地靜態(tài)資源400 404

    SpringBoot代理訪問本地靜態(tài)資源400 404

    問題:訪問過程中可能會出現400、404問題 前提:保證有文件,并且文件路徑正確 SpringBoot如何配置靜態(tài)資源代理,大家可以網上找一找,或者也可以參考我的另一篇博客 SpringBoot addResourceHandlers 代理靜態(tài)資源 1、路徑純英文 此種情況目前沒有遇到過問題 2、路徑包含中文 此種

    2024年02月12日
    瀏覽(23)
  • 【小沐學C#】WPF中嵌入web網頁控件(WebBrowser、WebView2、CefSharp)

    【小沐學C#】WPF中嵌入web網頁控件(WebBrowser、WebView2、CefSharp)

    使用 Windows Presentation Foundation (WPF),你可以創(chuàng)建適用于 Windows 且具有非凡視覺效果的桌面客戶端應用程序。 WPF 的核心是一個與分辨率無關且基于矢量的呈現引擎,旨在充分利用現代圖形硬件。 WPF 通過一套完善的應用程序開發(fā)功能對該核心進行了擴展,這些功能包括可擴展應

    2024年02月03日
    瀏覽(32)
  • WPF混合開發(fā)之WebView2(二) WebView2的簡單使用

    WPF混合開發(fā)之WebView2(二) WebView2的簡單使用

    在上一篇文章中,我們介紹了WebView2的環(huán)境搭建,點此前往,在這一章節(jié),我們將使用WebView2簡單搭建一個WPF程序,在程序中加載百度搜索頁面,廢話不多說,直接上流程。 建立WPF工程 建立WPF工程步驟很簡單,在此不再截圖,直接上步驟: 打開Visual Stido 2022(博主使用的是vs

    2024年02月05日
    瀏覽(22)
  • 【仿寫tomcat】五、響應靜態(tài)資源(訪問html頁面)、路由支持以及多線程改進

    【仿寫tomcat】五、響應靜態(tài)資源(訪問html頁面)、路由支持以及多線程改進

    如果我們想訪問html頁面其實就是將本地的html文件以流的方式響應給前端即可,下面我們對HttpResponseServlet這個類做一些改造 writeHtml這個方法將會讀取webApp下面的html文件,注意只讀取下面一級文件中的html文件,然后將這個文件以二進制流的形式轉換成字符串拼接到上面定義的

    2024年02月12日
    瀏覽(26)
  • WPF中使用WebView2控件

    WPF中使用WebView2控件

    WebView2 全稱 Microsoft Edge WebView2 控件,此控件的作用是在本機桌面應用中嵌入web技術(html,css,javascript),從名字就可以看出來WebView2使用了Edge內核渲染web內容。 通俗來說,WebView2控件是一個UI組件,允許在桌面應用中提供web能力的集成,即俗稱的混合開發(fā)。 助力程序開發(fā)和

    2024年02月03日
    瀏覽(63)
  • express靜態(tài)資源訪問錯誤 xxx.js was blocked due to MIME type (“text/html“)

    歸根結底原因是沒有靜態(tài)資源xxx.js的訪問權限 如何在express中給靜態(tài)資源添加訪問權限,我在express js中添加以下語句解決了該問題: 此時訪問public文件夾中的xxx.js文件時,只需要使用路徑 http://127.0.0.1/xxx.js 即可訪問,路徑中不需要帶public ---------------------------------------------

    2024年02月22日
    瀏覽(20)
  • C++ 在Win32中簡單使用WebView2

    C++ 在Win32中簡單使用WebView2

    Microsoft Edge WebView2 控件允許在本機應用中嵌入 web 技術(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作為繪制引擎,以在本機應用中顯示 web 內容。 使用 WebView2 可以在本機應用的不同部分嵌入 Web 代碼,或在單個 WebView2 實例中生成所有本機應用。可以去官網查看具體

    2024年02月06日
    瀏覽(23)
  • 記錄使用nginx部署靜態(tài)資源流程,以及遇到的訪問靜態(tài)資源404問題

    記錄使用nginx部署靜態(tài)資源流程,以及遇到的訪問靜態(tài)資源404問題

    將網站靜態(tài)資源(HTML,JavaScript,CSS,img等文件)與后臺應用分開部署實現 動靜分離 ,提高用戶訪問靜態(tài)代碼的速度,降低對后臺應用訪問,減輕后臺服務器的壓力。 這里我選擇放在了 html文件夾 下,(也可以放在和html文件夾同級,或其它位置 打開 conf文件夾 打開總配置文

    2024年02月08日
    瀏覽(26)
  • c# 通過webView2模擬登陸小紅書網頁版,解析無水印視頻圖片,以及解決X-s,X-t簽名驗證【2023年4月29日】

    c# 通過webView2模擬登陸小紅書網頁版,解析無水印視頻圖片,以及解決X-s,X-t簽名驗證【2023年4月29日】

    一、c# WebView2簡介 ? 1.一開始使用WebBrowser,因為WebBrowser控件使用的是ie內核,經過修改注冊表切換為Edge內核后, 發(fā)現Edge內核版本較低,加載一些視頻網站提示“瀏覽器版本過低“,”視頻無法加載“。 2.WebBrowser內核版本與WebView2比較 WebBrowser內核版本: 內核版本 (Version) E

    2024年02月05日
    瀏覽(28)
  • 一.Winform使用Webview2(Edge瀏覽器核心) 創(chuàng)建demo(Demo1)實現回車導航到指定地址

    一.Winform使用Webview2(Edge瀏覽器核心) 創(chuàng)建demo(Demo1)實現回車導航到指定地址

    往期相關文章目錄 專欄目錄 WinForms 應用中的 WebView2 入門 按照官方文檔一路操作,可以自行百度或者查看WinForms 應用中的 WebView2 入門。為了避坑,本人安裝的時vs2022(visual studio 以下簡稱vs) 打開vs(visual studio 以下簡稱vs) 點擊 創(chuàng)建新項目 ,選擇 C# Windows 窗體應用 (.NET Framework

    2024年02月21日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包