2013-02-26 21 views
0

似乎ASP.NET MVC Web API中的FormDataCollection自動解碼值。有沒有辦法關閉它?我使用小提琴手以下數據發佈到我的網址:在ASP.NET MVC WebApi中打開AutoDecode off

.code=2001&Color=Lam%E9%20Purple 

不幸的是,顏色解碼後,結果爲以下:

Lam� Purple 

我希望得到的是這樣的:

Lamé Purple 

代碼使用:

[HttpPost] 
public HttpResponseMessage PostItem(FormDataCollection collection) 
{ 
    int qty = 5000; 
    var response = Request.CreateResponse(HttpStatusCode.Created); 
    response.StatusCode = HttpStatusCode.OK; 
    if (collection == null) 
    { 
     response.Headers.Add("Available", qty.ToString()); 
     return response; 
    } 

    var item = new Item(); 
    foreach (KeyValuePair<string, string> keyValuePair in collection) 
    { 
     switch(keyValuePair.Key) 
     { 
      case ".quantity": 
       item.Qty = Convert.ToInt32(keyValuePair.Value); 
       break; 
      case ".code": 
       item.Style = keyValuePair.Value; 
       break; 
      case "Color": 
       item.Color = keyValuePair.Value; 
       break; 
      case "Size": 
       item.Size = keyValuePair.Value; 
       break; 
     } 
    } 

    qty = Repository.GetInventory(item); 
    response.Headers.Add("Available", qty.ToString());  
    return response; 
} 

回答

0

您似乎正在使用某些特定的請求編碼,而不是UTF-8。因此,適應你的web.config因此使用<globalization>元素:

<globalization requestEncoding="iso-8859-1" /> 

,或者確保您發送正確的UTF-8編碼的URL請求:

code=2001&Color=Lam%C3%A9%20Purple 
+0

我應該提到,我已經嘗試過這一點。它的結果是一樣的。 – vikasde 2013-02-26 21:28:17

+0

我已經更新了我的答案。嘗試發送'Color = Lam%C3%A9%20Purple'而不是'Color = Lam%E9%20Purple'的正確utf-8 url編碼值。 – 2013-02-26 21:28:30

+0

我無法控制請求。但是我可以看到字符串正在被轉義。我只需要避開它,但asp.net解碼之前,我可以unescape。 – vikasde 2013-02-26 21:30:27