azure 在部署函数时修复CORS和冲突错误

vfhzx4xs  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(125)

我对Azure云是全新的。当我使用VS代码将Azure Function部署到Function应用程序时,在Azure门户中,我看到错误说:
System.InvalidOperationException:在配置的存储帐户中检测到主机ID“functionAppName”的冲突。
当我尝试使用Code Test/Run选项运行函数时,Run按钮被禁用,并显示错误消息:
在portal中运行函数需要应用显式接受来自https://portal.azure.com的请求。这就是所谓的跨域资源共享(CORS)。
我不知道这些错误是怎么回事,因为使用Azure对我来说是全新的。如何解决这些问题?

错误1:

AZFD004
Diagnostic event
Error code
AZFD004
Level
Error
Message
A collision for Host ID 'functionAppName' was detected in the configured storage account. For more information, see URL.
Details
System.InvalidOperationException : A collision for Host ID 'functionAppName' was detected in the configured storage account. For more information, see URL.
Hit count
23
Timestamp
October 6, 2023 at 12:30:18 AM GMT+5:30
Help link

错误二:

Running your function in portal requires the app to explicitly accept requests from https://portal.azure.com. This is known as cross-origin resource sharing (CORS). Click here to add https://portal.azure.com to the allowed origin configuration.

__init__.py

import azure.functions as func
import sys
import os
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.join(current_dir))

 # import 'test_run' module
from test_run import func_1, func_2, func_3

def main(req: func.HttpRequest) -> func.HttpResponse:
    try:
        func_1()  
        func_2()
        func_3()

        name = req.params.get('name')
        if not name:
            return func.HttpResponse("Please pass a 'name' parameter in the query string.", status_code=400)

        return func.HttpResponse(f"Hello {name}. The function triggered successfully.")
    except Exception as e:
        return func.HttpResponse(f"An error occurred: {str(e)}", status_code=500)

test_run.py

def func_1():
    '''some code here'''
def func_2():
    '''some code here'''
def func_3():
    '''some code here
ipakzgxi

ipakzgxi1#

我已经使用了你的代码,并在本地测试,以及在门户网站后部署,它为我预期的工作。

验证码:

import  sys
import  os
import  azure.functions  as  func 
from .test_run  import  func_1,func_2,func_3 

current_dir  =  os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.join(current_dir))

def  main(req: func.HttpRequest) -> func.HttpResponse:

try:
func_1()
func_2()
func_3()  

name  =  req.params.get('name')
if  not  name:
    return  func.HttpResponse("Please pass a 'name' parameter in the query string.", status_code=400)
return  func.HttpResponse(f"Hello {name}. The function triggered successfully.")

except  Exception  as  e:
return  func.HttpResponse(f"An error occurred: {str(e)}", status_code=500)

test_run.py-

def  func_1():
print("Testing func_1")

def  func_2():
print("Testing func_2")

def  func_3():
print("Testing func_3")

本地测试结果-

在测试时,您需要传递name=<anything>以获得结果。

在门户-

你需要像下面这样传递name参数。

vbopmzt1

vbopmzt12#

错误1

我假设你还没有编辑上述错误消息,它的逐字说A collision for Host ID 'functionAppName' was detected in the configured storage account. For more information, see URL.?如果你的函数应用程序实际上被称为functionAppName,我会非常惊讶,因为函数应用程序的名称必须是全局唯一的,所以我会说,看起来你的配置中有一个复制+粘贴错误。执行类似git grep -i 'functionAppName'的操作,在repo中搜索字符串functionAppName的所有示例,并将它们替换为Function App的实际名称。

错误2

我不太清楚这是什么问题?错误消息告诉您需要将https://portal.azure.com/添加到Function App的CORS设置中允许的来源列表中。有关如何执行此操作的更多信息,请参阅以下MS文档:跨域资源共享。

相关问题