2017-05-04 13 views
0

AWS S3のアップロードとバケットからのダウンロードで作業しています。生成されたURLリンクの後、正常に動作しています。しかし、URLの期限が切れた後、以下のXMLファイルが表示されます。S3で期限切れのオブジェクトのUIをカスタマイズする方法は?

<Error> 
    <Code>AccessDenied</Code> 
    <Message>Request has expired</Message> 
    <Expires>2017-03-31T14:49:56Z</Expires> 
    <ServerTime>2017-05-04T11:32:40Z</ServerTime> 
    <RequestId>...</RequestId> 
    <HostId>...</HostId> 
</Error> 

上記の出力やその他の方法でテーブルとして表示する方法や、単に「期限切れ」と表示する方法はありますか?

+0

これは[AWS S3がgetSignedUrlの有効期限が切れた後に正常に処理される403]の可能な複製です(http://stackoverflow.com/a/33109592/1695906)。しかし、私は自己奉仕に見えたくないので、他の人が体重を握るまで私のゴールデンデュープハンマーを落とさないように瞬間に傾いています - 私は他の質問で唯一の答えを書きました。私は解決策にはとても満足しています。そこにはネイティブな解決策はありません。私の回避策では、スタイルシートへのリンクを追加するためにXMLを変更するにはプロキシをS3の前に置き、結果をスタイルするにはブラウザのXSLTを必要とします。しかし、それはうまく動作します。 –

答えて

0

上記の出力をアプリケーションに合わせてカスタマイズすることを前提としています。 AWS自体から返されたエラーメッセージを更新することはできません。

これについてはいくつかの方法がありますが、本質的に、エラー応答が返されたかどうかを判断する必要があります。そこから、XMLレスポンスのように見えるだけで解析できます。

もちろん、XML応答の解析から例外をキャッチしたいと思うでしょう。

string data = @"<Error> 
        <Code>AccessDenied</Code> 
        <Message>Request has expired</Message> 
        <Expires>2017-03-31T14:49:56Z</Expires> 
        <ServerTime>2017-05-04T11:32:40Z</ServerTime> 
        <RequestId>...</RequestId> 
        <HostId>...</HostId> 
       </Error>"; 

XDocument xdoc = XDocument.Parse(data); 
if(xdoc.Descendants("Error").Any()) 
{ 
    var errorMessage = from lv1 in xdoc.Descendants("Error") 
       select lv1.Element("Message").Value; 

    Console.WriteLine(errorMessage.FirstOrDefault()); 
} 
関連する問題