试图把我的头缠起来。我有一个媒体文件名,文件名中带有“&”号。如果尝试创建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 Media Service门户上载相同的文件,则可以正常工作。我不是在做什么门户网站?
更新
如果我不转义资产名称,则会收到一个400错误的请求,而不是返回(经典的.net黄屏死机)。据我所知,这意味着名称包含无效字符。删除“&”后,它就会起作用。
从我读过的here来看,它提到您不能在资产名称中使用以下字符(“ <”,“>”,“%”,“&”,“:” ,“ \”,“?”,“ /”,“ *”,“ +”,“。”,单引号字符或任何控制字符)。但这使我感到困惑。容器名称是自动生成的(资产-...一些GUID ...),然后它只是容器中的Blob(文件名中允许使用'&'字符。我只是不明白为什么,如果我是通过门户网站上传的,则可以,但是通过SDK失败。
答案 0 :(得分:0)
Azure Portal使用v2 API,该API不遵循Azure资源管理的命名约束。
在V3 API中,资产是一个命名的ARM实体,因此遵循此处定义的所有其他Azure资源的命名规则:Naming Conventions in v3
使用v3 API时,您应遵循Azure ARM实体的命名准则。如果需要存储备用身份信息,则可以使用资产上的自定义“ AlternateId”属性。或者,您可以根据需要使用description属性。
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"
}
}'