2017-05-04 87 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);然而,我現在傾向於不要放棄我的金色笨重的錘子,直到其他人沉重,因爲我不想出現自我服務 - 我在另一個問題上寫了唯一的答案。我對這個解決方案非常滿意,它不是本地解決方案 - 沒有解決方案。我的解決方法需要在S3前放置一個代理來修改XML以添加到樣式表的鏈接,並使用瀏覽器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()); 
} 
相關問題