创建带有名称转义的&符号的Azure媒体资产v3时,BadRequest会失败,但是在通过Azure门户创建时可以正常工作

问题描述 投票:0回答:1

[试图绕过这个头。我有一个媒体文件名,文件名中带有“&”号。如果我尝试创建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失败。

azure azure-media-services
1个回答
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"
  }
}'
© www.soinside.com 2019 - 2024. All rights reserved.