本文檔旨在為開發人員解答在使用.NET SDK過程中所遇到的常見問題,以提升開發效率。
環境檢查
請確認已正確安裝.NET運行環境,最低要求為.NET Framework ≥4.5或.NET Core ≥2.0
問題列表
問題1:AK傳參問題。
問題現象:代碼運行時報錯,報錯資訊中包含如下資訊時,表示AK未正確地設定阿里雲的憑證(AccessKey)。
V2.0 SDK:Unhandled exception. Tea.TeaException: Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly.
V1.0 SDK:Unhandled exception. System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter 'Access key ID cannot be null.')
解決方案:
執行以下命令,檢查您的環境變數中是否配置有ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET:
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%若返回正確的AccessKey,則說明配置成功。如果返回為空白或錯誤,請嘗試重新設定,具體操作請參見在Linux、macOS和Windows系統配置環境變數。
檢查代碼中AK相關內容是否存在錯誤。
常見的錯誤樣本:
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = Environment.GetEnvironmentVariable("yourAccessKeyID"), AccessKeySecret = Environment.GetEnvironmentVariable("yourAccessKeySecret"), };正確樣本:
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), };說明Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")和Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),表示是從環境變數中擷取ALIBABA_CLOUD_ACCESS_KEY_ID及ALIBABA_CLOUD_ACCESS_KEY_SECRET的值。
重要切勿直接線上上代碼中明文寫入 AccessKey,該寫法存在安全隱患。
問題2:運行時,提示“TimeoutException...”。
逾時問題可能由多種因素引起,以下是一些常見的原因及相應的解決步驟:
網路連接問題
情況描述:用戶端與伺服器之間的網路不通或網路不穩定導致請求無法到達目標伺服器。
解決方案:
使用ping或curl命令測試本地主機與雲產品Endpoint之間連通性,例如調用傳送簡訊介面逾時時,使用ping dysmsapi.aliyuncs.com或curl -v https://dysmsapi.aliyuncs.com測試連通性。
若命令執行逾時或者無響應,請檢查本地防火牆或路由器中是否有阻斷策略。
若命令有響應,建議設定合理的逾時時間,避免因配置不當導致請求失敗,具體操作請參見逾時配置。範例程式碼如下:
// 運行時參數設定,僅對使用了該運行時參數執行個體的請求有效 RuntimeOptions runtimeOptions = new RuntimeOptions(); runtimeOptions.ConnectTimeout = connectionTimeoutMillis;
API處理時間過長
情況描述:目標API處理請求的時間超過了設定的讀逾時時間。
解決方案:通過配置讀逾時時間來適應較長的API回應時間, 具體操作請參見逾時配置。例如通過配置讀逾時時間參數來延長當前請求的讀逾時時間,範例程式碼如下:
// 運行時參數設定,僅對使用了該運行時參數執行個體的請求有效
RuntimeOptions runtimeOptions = new RuntimeOptions();
runtimeOptions.ReadTimeout = readTimeoutMillis;問題3:運行時,提示“Unhandled exception. System.ArgumentNullException: Value cannot be null. (Parameter 'key')”
此問題的原因是credentials版本較低,建議升級Aliyun.Credentials到最新版本。
dotnet add package Aliyun.CredentialsC#語言基礎異常自查表
報錯資訊 | 錯誤原因 | 解決方案 |
SocketException | 發生與通訊端相關的錯誤,如連線逾時、串連被關閉等。 | 檢查網路連接的可用性(可通過curl指令驗證),並確保目標主機和連接埠號碼正確。 |
HttpRequestException | 發生與 HTTP 要求相關的錯誤,如無法串連到伺服器、請求逾時等。 | 檢查網路連接和伺服器狀態,確保伺服器正常運行。可以使用 try-catch 塊來捕獲 HttpRequestException 並處理異常情況。 |
ProtocolViolationException | 發生與網路通訊協定相關的錯誤,如無效的 HTTP 要求或響應。 | 檢查網路通訊協定的規範,確保請求和響應符合協議要求。可以使用條件陳述式或異常處理機制來處理協議違規異常。 |
TimeoutException | 操作在指定的時間內未完成,達到了逾時時間。 | 增加操作的逾時時間,或最佳化操作的效能以確保在指定的時間內完成。可以使用條件陳述式或異常處理機制來處理逾時異常。 |
DNS resolution failure | 無法解析網域名稱或無效的網域名稱。 | 檢查網域名稱的正確性,並確保 DNS 伺服器可用。可以使用條件陳述式或異常處理機制來處理 DNS 解析失敗。 |
支援人員
如果您在使用過程中遇到其他問題,請通過以下方式與我們聯絡:
提交工單:阿里雲提交工單頁面。
如果您有相關需求或反饋,可以添加DingTalk群(群號為60965016010)聯絡技術支援人員。