2014-01-24 71 views
1

我使用ServiceStack與MVC4並獲取500錯誤時請求參數很長。我將通過逗號分隔的ProductIds發送到控制器通過AJAX。在控制器中,我有以下調用servicestack API來檢索數據。ServiceStack請求500給大的請求

ResponseDTO res = restClient.Get(new RequestDTO { ProductIDs = ids}); 
//ResponseDTO res = restClient.Get(new RequestDTO { ProductIDs = "1234,1235,1236"}); 

如果我在上面提交小參數,它工作正常,沒有錯誤。但是,當參數字符串中的1800個字符範圍內,它只是以上線路出現故障並給出了500內部服務器錯誤:

NetworkError: 500 Internal Server Error - http://localhost/Products/GetProducts 

Exception Details: ServiceStack.ServiceClient.Web.WebServiceException: Not Found 

有張貼大型參數請求對GET方法的限制嗎?爲什麼在成功調用API的小參數時,對於大請求失敗,通過SQL過程檢索數據併發送正確查看。我能看到什麼來解決這個問題?謝謝!

p.s.當我通過VS2012進行調試時,我看到異常詳細信息,我看到消息:Not found和StatusCode:404。

+3

您不應該對長數據使用GET請求。網址在不同的瀏覽器中有不同的長度限制。有些瀏覽器不支持超過2KB的GET請求,其中'在1800個字符範圍內'接近。如果你發佈會怎麼樣?這可能是ServiceStack的一個問題,但它不太可能,因爲'string'類可以輕鬆處理2000個字符。 – Scott

+0

我無法重現該錯誤。請張貼您的DTO。我設法發送至少13000個字符的字符串,沒有問題使用GET。 – Scott

+0

我們在服務項目中有GET方法作爲接口並且沒有實現POST。所以我得到「方法不允許」的錯誤。我會嘗試更改POST的所有地方,看看它是否有效。是的,他們是字符串,並通過AJAX json發佈時序列化。 – user704988

回答

1

正如Scott上面提到的,我們嘗試POST方法解決所有問題。我知道GET對瀏覽器URL長度有限制,但並不認爲它很重要,因爲我們有ServiceStack框架,並且他們的所有示例都使用GET。再次感謝斯科特。