AngularJS和WebAPI CORS

时间:2015-06-06 20:28:05

标签: javascript .net angularjs asp.net-web-api cors

WebAPI上的CORS问题是愚蠢还是我? Aren的网络服务假设被第三方使用?有人可以向我解释为什么在调用WebAPI时遇到问题,如果它在不同的域上,它是一个Web服务,它假设在不同的域上!

我将CORS库添加到我的WebAPI并在我的配置中添加了启用,但仍然无效。

谁的好主意是为了获得CORS的信息而打两个电话。现在我的所有要求都会加倍!?

如何修复AngularJS和Webapi之间的CORS问题?如果有人能够从理论上向我解释,为什么我可以在没有这个CORS的情况下调用我的Web服务,这真的很好。 Aren的网络服务假设被所有人使用?

1 个答案:

答案 0 :(得分:0)

CORAP问题不会发生在WebAPI部分。当WebAPI和客户端位于两个不同的端口时,它将始终位于客户端部分。

如果是ASP.NET WebAPI,则需要安装Microsoft.Owin.Cors包并在Web服务器启动时初始化CORS。

在WebiApiConfig.cs中输入类似的内容:

<httpProtocol>
            <customHeaders>
                <add name="Access-Control-Allow-Origin" value="http://localhost" />
                <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Cache-Control" />
                <add name="Access-Control-Allow-Credentials" value="true" />
                <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
            </customHeaders>
        </httpProtocol>

<强>的Web.Config

class Object2(QObject):

    def __init__(self):
        super().__init__()

    @pyqtSlot(object)
    def slot(self, data):
        print("Received data %s in thread %s" % (data, QThread.currentThread()))
        while len(data) < 10:
            time.sleep(1)
            print("Current data is %s" % data)


class Object1(QObject):

    def __init__(self):
        super().__init__()

    sig = pyqtSignal(object)

    @pyqtSlot()
    def emit_in_thread(self):
        self.data = [1]
        print("Emitting data %s in thread %s" % (self.data, QThread.currentThread()))
        self.sig.emit(self.data)
        while len(self.data) < 10:
            time.sleep(1)
            self.data += [1]
            print("Modified data to %s" % self.data)

# App
q_app = QApplication(sys.argv)

# Setup
thread = QThread()
obj1 = Object1()
obj1.moveToThread(thread)
thread.start()
obj2 = Object2()
obj1.sig.connect(obj2.slot, type=Qt.QueuedConnection)

# Emit soon
QTimer.singleShot(200, obj1.emit_in_thread)

# Run event loop
sys.exit(q_app.exec_())