2013-09-25 40 views
1

我有一個託管在IIS服務器上的API。當垃圾字符請求API時,Guid字段設置爲空

我正在向下面的參數的URI請求。

{"CurrentTime":"2013-09-23 13:05:52", 
"Measurement":[{"Comment":"Test Comment","RecordIdentifier":"7F54BF3C-6022-423B-8B8F-0121BA2AF516"}], 
"Source":"ABC","Destination":"XYZ", 
"FinalIdentifier":"058B5913-FAB9-4641-B02E-2729A02B5059"} 

對於上述請求,我可以成功地反序列化請求參數。注意「FinalIdentifier」和「Comment」參數的值。

但是,當要求如:

{"CurrentTime":"2013-09-23 13:05:52", 
"Measurement":[{"Comment":"Âëīö","RecordIdentifier":"01CEBEAE-B99D-47B1-9C2D-1CB80069917B"}], 
"Source":"ABC","Destination":"XYZ", 
"FinalIdentifier":"058B5913-FAB9-4641-B02E-2729A02B5059"} 

我也可以反序列化成功後,該請求,但「FinalIdentifier」參數越來越Guid.Empty (00000000-0000-0000-0000-000000000000)的價值。 這裏注意到第二個評論字段中的Umlet字符,它是一些德語字符(垃圾字符)。

那麼,垃圾字符會影響GUID的值嗎? 但是,請注意兩個請求中的「RecordIdentifier」值的值。這不是「RecordIdentifier」的問題。

那麼,哪裏出問題了?

我有下面的實體請求和解析。

public class Measurement 
{ 
    public string Comment { get; set; } 
    public Guid RecordIdentifier { get; set; } 
} 
public class MeasurentEntityMain 
{ 
    public List<Measurement> measurement { get; set; } 
    public Guid FinalIdentifier { get; set; } 
    public string Source { get; set; } 
    public string Destination { get; set; } 
} 

以上都要求我從小提琴手抓獲。在API端我已經通過調試進行了測試。

那麼,爲什麼這個Guid字段設置爲空字段。

我正在使用JSON序列化和反序列化。

回答

0

我發現了上述問題的解決方案。

其實我在檢查控制器端的Guid值。並獲得空值。

我在API端創建了HTTPhandler。此處理程序在路由時處理每個請求,然後將請求轉發給相應的APIController。

我注意到在Handler方面,對於帶有一些變音符號的請求,Requested數據的某些部分被截斷。

在真正的Guid字段中是32個字母數字值和4個破折號。但是我在Guid Value中使用了29個字符,因爲它是請求數據中的最後一個參數,所以有些部分被截斷。

當一派更我發現,與長度函數元音字符返回長度= 2。

所以,對於3個元音字符,在請求數據3個字符被越來越截斷,我使用UTF8ENCODING然後將其轉換爲字節數據與原始字符串的長度。

對於這一問題訪問更多詳細信息: iOS HttpRequest with umlaut has incorrect length

太感謝了很多。