使用 BadRequest 创建名称中带有转义符号的 Azure Media Asset v3 失败,但通过 Azure 门户创建时工作正常
Creating Azure Media Asset v3 with escaped ampersand in name fails with BadRequest, but works fine when created via the Azure portal
我正在努力解决这个问题。我有一个媒体文件,文件名中有一个 & 符号。如果我尝试创建 Azure 媒体资产,我会收到 BadRequest 错误,其中
{
error: {
code: 'InvalidDoubleEncodedRequestUri',
message:
"The request URI 'https://management.azure.com:443/subscriptions/..../resourceGroups/.../providers/Microsoft.Media/mediaServices/.../assets/M%2526G+1+Width.mp4?api-version=2018-07-01' is not valid, because it contains double encoding sequence '%25'.",
},
}
我试图转义文件名中的“&”,但仍然出现错误。我想不通的是,如果我通过 Azure 媒体服务门户上传相同的文件,它工作正常。门户网站在做什么而我不是?
更新
如果我不对资产名称进行转义,则会返回一个 400 错误请求(经典的 .net 黄屏死机)。据我所知,这意味着该名称包含无效字符。只要我删除“&”,它就会起作用。
根据我的阅读 here,它提到您不能在资产名称中使用以下字符('<'、'>'、'%'、'&'、' :'、'\'、'?'、'/'、'*'、'+'、'.'、单引号字符或任何控制字符)。但这让我感到困惑。容器名称是自动生成的(asset-...some guid...),然后它只是我容器中的 blob(文件名中允许使用“&”字符。我只是不明白为什么,如果我通过门户网站上传,它可以工作,但通过 SDK 失败。
Azure 门户使用 v2 API,它不遵循 Azure 资源管理命名限制。
在 V3 API 中,资产是一个命名的 ARM 实体,因此遵循此处定义的所有其他 Azure 资源的命名规则:Naming Conventions in v3
使用 v3 API 时,您应该遵循 Azure ARM 实体的命名指南。如果需要存储备用身份信息,可以在 Asset 上使用自定义 "AlternateId" 属性。或者您可以根据需要使用描述 属性。
curl -X PUT \
'https://management.azure.com/subscriptions/XXXXXXX/resourceGroups/XXXXX/providers/Microsoft.Media/mediaServices/XXXXX/assets/myAsset?api-version=2018-07-01' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer
-H 'Connection: keep-alive' \
-H 'Content-Length: 303' \
-H 'Content-Type: application/json' \
-H 'Host: management.azure.com' \
-d '{
"properties": {
"description": "some custom description with whatever you need to store",
"alternateId": "(Optional) some custom string to help you look it up in your database"
}
}'
我正在努力解决这个问题。我有一个媒体文件,文件名中有一个 & 符号。如果我尝试创建 Azure 媒体资产,我会收到 BadRequest 错误,其中
{
error: {
code: 'InvalidDoubleEncodedRequestUri',
message:
"The request URI 'https://management.azure.com:443/subscriptions/..../resourceGroups/.../providers/Microsoft.Media/mediaServices/.../assets/M%2526G+1+Width.mp4?api-version=2018-07-01' is not valid, because it contains double encoding sequence '%25'.",
},
}
我试图转义文件名中的“&”,但仍然出现错误。我想不通的是,如果我通过 Azure 媒体服务门户上传相同的文件,它工作正常。门户网站在做什么而我不是?
更新
如果我不对资产名称进行转义,则会返回一个 400 错误请求(经典的 .net 黄屏死机)。据我所知,这意味着该名称包含无效字符。只要我删除“&”,它就会起作用。
根据我的阅读 here,它提到您不能在资产名称中使用以下字符('<'、'>'、'%'、'&'、' :'、'\'、'?'、'/'、'*'、'+'、'.'、单引号字符或任何控制字符)。但这让我感到困惑。容器名称是自动生成的(asset-...some guid...),然后它只是我容器中的 blob(文件名中允许使用“&”字符。我只是不明白为什么,如果我通过门户网站上传,它可以工作,但通过 SDK 失败。
Azure 门户使用 v2 API,它不遵循 Azure 资源管理命名限制。
在 V3 API 中,资产是一个命名的 ARM 实体,因此遵循此处定义的所有其他 Azure 资源的命名规则:Naming Conventions in v3
使用 v3 API 时,您应该遵循 Azure ARM 实体的命名指南。如果需要存储备用身份信息,可以在 Asset 上使用自定义 "AlternateId" 属性。或者您可以根据需要使用描述 属性。
curl -X PUT \
'https://management.azure.com/subscriptions/XXXXXXX/resourceGroups/XXXXX/providers/Microsoft.Media/mediaServices/XXXXX/assets/myAsset?api-version=2018-07-01' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer
-H 'Connection: keep-alive' \
-H 'Content-Length: 303' \
-H 'Content-Type: application/json' \
-H 'Host: management.azure.com' \
-d '{
"properties": {
"description": "some custom description with whatever you need to store",
"alternateId": "(Optional) some custom string to help you look it up in your database"
}
}'