如何使用CefSharp的自定义方案向请求的资源添加“访问控制允许来源”

时间:2019-01-28 08:59:09

标签: cefsharp

使用具有自定义方案的XMLHttpRequest which is the subject of my previous question,我正在加载本地文件。为了进行测试,我使用了disable-web-security参数,但我不想在禁用此功能的情况下使用浏览器。

启用disable-web-security后,我会得到

  

所请求的资源上没有“ Access-Control-Allow-Origin”标头。

如何(或在何处)将其添加到标题或以其他方式修复。

首先,我尝试使用AddCrossOriginWhitelistEntry,但我不知道要输入什么。我的方案是test://,我以test://local/folder/3Markets.xlsx为例。网页来源为https://product.company.de

CefSharp.Cef.AddCrossOriginWhitelistEntry("test://local", "test", "product.company.de", True)

还有这个

CefSharp.Cef.AddCrossOriginWhitelistEntry("test://local", "test", "", True)

但是说实话,我不明白我应该在这里放什么。

我还认为我可以通过自定义方案处理来解决此问题。

Dim cs As New CefCustomScheme With {
        .SchemeName = DBSchemeHandler.DBSchemeName,
        .SchemeHandlerFactory = New DBSchemeHandler,
        .IsStandard = True,   'DONT THINK THIS IS NEEDED
        .IsCorsEnabled = True   'DONT THINK THIS IS NEEDED
    }
    dbSurferSettings.RegisterScheme(cs)

我认为在响应中,我需要添加此标头。还是请求?

Public Overrides Function GetResponse(response As IResponse, ByRef responseLength As Long, ByRef redirectUrl As String) As Stream

Dim aURI As New Uri(response)
Dim fileName As String = aURI.AbsolutePath

Dim bytes As Byte() = File.ReadAllBytes(fileName)
Dim mStream = New MemoryStream(bytes)

If mStream Is Nothing Then
    Return Nothing
Else
    Stream = mStream
    Stream.Position = 0
    responseLength = Stream.Length
    Dim fileExtension = Path.GetExtension(fileName)
    MimeType = GetMimeType(fileExtension)
    StatusCode = CInt(HttpStatusCode.OK)
    response.Headers.Add("Access-Control-Allow-Origin", "*")
    Return mStream
End If
End Function

1 个答案:

答案 0 :(得分:0)

对于任何对此进行审查的人。 Amaitland的评论纠正了我的问题。

该网站的域名为https://product.company.de,我的方案为test。因此,一种方法如下。

CefSharp.Cef.AddCrossOriginWhitelistEntry("https://product.company.de", "test", "", True)

另外我做错的另一件事是我在应用程序启动时添加了它。但是它返回了错误。在我的示例https://product.company.de中,您需要在浏览器实际出现在网站上之后添加它。在启动时用所有其他设置进行设置意味着它会返回跌落。我已将其放入FrameLoadEnd事件。