asp.net - 来源 http ://localhost is not allowed by Access-Control-Allow-Origin

标签 asp.net vb.net rest localhost

我正在尝试从本地计算机调用网络服务。但我在 Chrome 控制台中收到以下错误:
http://www.test.com/service.svc/api/?cid=1 405 (Method Not Allowed) XMLHttpRequest cannot load http://www.test.com/service.svc/api/?cid=1.<br/> Origin http://localhost is not allowed by Access-Control-Allow-Origin.

我的本​​地测试网址是: http://localhost/welcome/html/index.html

当我将代码上传到实际域并从那里调用网络服务时,它当然可以工作。

我已经尝试更改访问控制 header ,但这没有帮助。

Namespace RestService

Public Class service
    Implements Iservice

    Public Function GetProvinces(ByVal cid As String) As AjaxControlToolkit.CascadingDropDownNameValue() Implements Iweddingservice.GetProvinces
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "DELETE, POST, GET, OPTIONS")
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*")

        Dim MyConnection As SqlConnection = GetConnection()
        Dim cmd As New SqlCommand("SELECT provinceid,title FROM provinces WHERE CountryID=@CountryID ORDER BY title ASC", MyConnection)
        cmd.Parameters.Add(New SqlParameter("@CountryID", cid))
        Dim values As New List(Of CascadingDropDownNameValue)
        Try
            MyConnection.Open()
            Dim reader As SqlDataReader = cmd.ExecuteReader
            While reader.Read
                values.Add(New CascadingDropDownNameValue(reader("title").ToString, reader("provinceid").ToString))
            End While
        Catch ex As Exception

        Finally
            MyConnection.Close()
        End Try
        Return values.ToArray
    End Function

End Class


End Namespace       

最佳答案

由于浏览器的原因,对服务的请求失败 same origin policy 。当您尝试访问http://www.test.com/处的资源时,您的本地服务器位于http://localhost 。这些都属于不同的领域。所以这是行不通的。

此问题的解决方案是使用 Access-Control-Allow-OriginAccess-Control-Allow-Methods(CORS 的一部分)规范您已将这些内容包含在响应 header 中,但这不会有任何好处,因为浏览器将使用 OPTIONS 动词发出飞行前请求来验证是否允许调用。由于您的服务无法处理 OPTIONS 动词,因此您会看到 405(方法不允许)错误。

因此,如果您希望可以从不同的域访问您的服务,那么您必须修改您的 WCF 服务以支持 CORS。我会推荐这个链接:http://blogs.microsoft.co.il/blogs/idof/archive/2011/07/02/cross-origin-resource-sharing-cors-and-wcf.aspx 。通过使用它,您可以使您的服务支持 CORS,而无需更改现有代码。

关于asp.net - 来源 http ://localhost is not allowed by Access-Control-Allow-Origin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597314/

相关文章:

c# - ID 键从 Label 到 int 的转换问题

asp.net - JavaScript 中的十进制比较

asp.net - CSS Sprite 显示内联 block 在 IE 浏览器中显示不正确

asp.net - 在计算字段上对 Gridview 进行排序

VB.net 开闭表格

python - 我应该为用户创建一个 API,为管理员创建一个 API 吗?

vb.net - 如何: streamreader in csv file splits to next if lowercase followed by uppercase in line

c# - .NET Winforms DataGridView - 任何嵌套方式?

javascript - 如何使用 Node.js 和 EXPRESS 在一个文件 Restful API 中设置两个根端点

json - 如何在 YouTube API v3 中禁用评论