首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问-控制-允许-源站不允许源站http://localhost

访问-控制-允许-源站不允许源站http://localhost
EN

Stack Overflow用户
提问于 2012-07-22 10:12:08
回答 1查看 18.2K关注 0票数 3

我正在尝试从本地计算机调用from服务。但我在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.

Origin http://localhost is not allowed by Access-Control-Allow-Origin.

我的本地测试URL是:http://localhost/welcome/html/index.html

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

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

代码语言:javascript
运行
复制
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       
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-23 12:59:44

由于浏览器same origin policy,对服务的请求失败。当您尝试访问http://www.test.com/上的资源时,您的本地服务器位于http://localhost。它们都在不同的域中。所以它不会起作用。

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

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11597314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档