2011-10-04 27 views
4

我有一個非常愚蠢的問題,但由於某種原因,我無法在網上找到任何治療方法或信息。當我向WebGet方法傳遞多個參數時WCF/WebAPI:HTTP 500錯誤

摘要:我無法傳遞給多個參數的WebGet方法。如果我這樣做,服務器返回HTTP 500錯誤,並且該方法不執行。我的代碼和請求如下。

[ServiceContract] 
public class WebmailAPI { 
... 
[WebGet(UriTemplate= "Webmail?messagetype={messageType}&unreadonly={unreadOnly}&skip={skip}&take={take}")] 
    public void Get(MessageType messageType, bool unreadOnly, int skip, int take) { 
    ... 
    } 
} 

的global.asax.cs: routes.SetDefaultHttpConfiguration(新WebApiConfiguration(){EnableHelpPage =真,EnableTestClient =真}); RouteTable.Routes.MapServiceRoute(「api /」);

此請求執行罰款: http://localhost:9000/api/Webmail/?messagetype=1

這一個返回500錯誤:

http://localhost:9000/api/Webmail/?messagetype=1&unreadonly=0&skip=0&take=100

信息: VS2010 SP1 + ASP.NET 4 +實體框架2001年6月CTP +最新的WebAPI

感謝您提前提供任何幫助!

P.S.我試圖在查詢字符串中對HTML編碼「&」 - 無效。

回答

6

使用false代替0unreadonly

http://localhost:9000/api/Webmail/?messagetype=1&unreadonly=false&skip=0&take=100

WCF Web HTTP Programming Model Overview,特別是UriTemplate查詢字符串參數和URL部的查詢字符串參數格式由數據類型。

+0

我會試試,謝謝! –

+0

是的,你是對的。 對於受衆:好吧,WCF/WebHttp/WebAPI對參數類型非常敏感。對於布爾參數,確保將值指定爲true/false,而不是1/0。它有點有趣,但它可以識別枚舉,但如果它們是用數字表示的話,則無法解析布爾值。 –

+0

@AlexAvrutin:我不認爲這是奇怪的,因爲框架支持枚舉,布爾也是如此。但是,在.NET中,唯一允許的值是'true'和'false'。 '0'和'1'不是布爾值,它們是整數,並且沒有隱式轉換。 – nicodemus13