为什么不从Global.asax添加Access-Control-Allow-Origin标头?

时间:2016-05-20 03:01:25

标签: c# asp.net vb.net soap cors

我有一个用VB.NET编写并在IIS 7上运行的简单SOAP服务。如果我使用Web.config添加Access-Control-Allow-Origin标头,我可以从运行JavaScript的远程客户端访问该服务:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

我实际上更喜欢在Global.asax中这样做。我有一个用C#编写的SOAP服务在同一台服务器上运行,这个方法运行得很好;但是,VB.NET服务没有。如果我删除上面的Web.config代码并添加以下Global.asax代码,则不会发送标头,远程客户端也无法使用该服务。

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)

    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*")

    If HttpContext.Current.Request.HttpMethod = "OPTIONS" Then
        'These headers are handling the "pre-flight" OPTIONS call sent by the browser
        HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache")
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept")
        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000")
        HttpContext.Current.Response.End()
    End If

End Sub

这与我用C#编写的类似服务中的方法相同,但是这个方法不会发送标头,也不允许远程客户端连接。

我错过了什么?

0 个答案:

没有答案