簡體   English   中英

忽略特殊字符 - Web API C#

[英]Ignore Special Characters - Web API C#

問題:特殊字符,特別是 $ 和 £ 導致 Web Api - ASP.NET C# 中的行為不一致。 調用 API 后,結果有時是 -

結果:{“消息”:“發生錯誤。”}

  • 請求格式:url + 消息;
  • 完整的 API 調用:“.........//api/data?Message=Test%20For%20%245700.00%20at%20”
  • 消息:“測試價格為 5700.00 美元”

我試過的

  1. 使用Uri.EscapeDataString(request); 調用 API,但結果仍然不是 100% 成功(50% 次通過,其余 50% 次出現上述錯誤消息)
  2. 刪除 $ 或 £ 符號,它每次都通過

問題:有沒有辦法允許特殊字符通過 API(就像字符串一樣)? 即使包含特殊字符,有沒有辦法只取回純字符串? 下面是一些獲取消息的代碼 -

public List<Results> Get(string Message)
{
   //DO SOMETHING WITH THE MESSAGE AS A STRING & RETURN RESULTS
}

另外,這是我調用 API 的方式 -

//CALLING API STEPS
string url = ".....//api/data?Message=";
string message = "Test For $5700.00 at ";
string completeURL = url + Uri.EscapeDataString(message);
var client = new WebClient();
var content = client.DownloadString(completeURL);

我在下面添加了一些額外的測試結果 -

測試結果 - 通過

string url = ".....//api/data?Message=";
string message = "Test For $5700.00 at ";
message = message.Replace("$", "%24");//Adding this line before the URL-encoding fixes the problem
string completeURL = url + Uri.EscapeDataString(message);
var client = new WebClient();
var content = client.DownloadString(completeURL);
//PASS - COMPLETE URL: ".....//api/data?Message=Test%20for%20%25245700.00%20at%20"
//RESULT - API CALL SUCCESSFUL

測試結果 - 失敗

string url = ".....//api/data?Message=";
string message = "Test For $5700.00 at ";
string completeURL = url + Uri.EscapeDataString(message);
var client = new WebClient();
var content = client.DownloadString(completeURL);
//FAIL - COMPLETE URL: ".....//api/data?Message=Test%20for%20%245700.00%20at%20"
//RESULT - EXCEPTION -> "The remote server returned an error: (500) Internal Server Error."

感謝您添加測試結果:

//PASS - COMPLETE URL: ".....//api/data?Message=Test%20for%20%25245700.00%20at%20"
//RESULT - API CALL SUCCESSFUL

//FAIL - COMPLETE URL: ".....//api/data?Message=Test%20for%20%245700.00%20at%20"
//RESULT - EXCEPTION -> "The remote server returned an error: (500) Internal Server Error."

似乎很清楚發生了什么:

  • 在“成功”情況下,您傳遞的是百分號(“%”,十六進制 0x25)和值“245700.00”。
  • 在“失敗”的情況下,您將傳遞一個美元符號 (0x24) 和值“5700.00”。
  • 您的應用程序(應用程序,而不是 Web API)在嘗試讀取“$”時失敗。

我懷疑失敗案例(HTTP 錯誤 500)“成功”案例都是錯誤的。

我認為您的意思是“5700.00”,而不是“245700.00”。

建議:

  • 消除“$” ...或...
  • 修改您的應用程序以期望(並接受)前導“$”符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM