2012-09-25 17 views
1

我使用NancyFX來爲Web站點託管我們的REST API。我們在數據庫中,我想更新用戶表:Nancy Web框架中API端點聲明的順序

1)全部用戶更新 - 更新所有領域 2)部分用戶更新 - 更新僅單場

我們使用南希0.7 - 所以目前它沒有PATCH支持 - 我只能用PUT

我定義我的API像

PUT ["/user/{username}"] - for complete update using passed-in user object value 
PUT ["/user/{username}/id/{newid}"] - for updating user id only 

然而,當我打電話第二API(更新ID只) - 它從來沒有得到被困南希 - 南希總是ca如果PUT [「/ user/{username}」]完全更新用戶,那麼Nancy總是隻調用完整的用戶更新端點。無論如何,我聲明API的順序是什麼。

需要幫助,以便我可以正確使用來自我們客戶端應用程序的PUT使用這兩種API。

回答

0

發現問題 - 這是用'@'字符在用戶名 - 特殊字符。

如果用戶名包含 '@' 字符,然後南希從不爲 把路由匹配 - /user/[email protected]/id/123到 PUT [「/用戶/ {名}/ID/{} NEWID 「]

它總是匹配爲 PUT路線 - /user/[email protected]/id/123到 PUT [」/用戶/ {用戶名}「]

1

通常,這是一個好想法到UrlEncode你的URI的任何動態數據組件。

所以,你的情況:

PUT - /user/[email protected]/id/123 

將成爲

PUT - /user/xyz%40yahoo.com/id/123 

南希將採取對您的價值解碼的照顧,所以當你從你的parameters動態對象中提取它會回到[email protected]

+0

這對'@'字符很好 - 但南希在解碼'+'字符時有問題 - 即使我使用URL編碼 - 南希將其解碼爲'空格' –

+0

啊,這不是南希的錯,如果數據是從表單發送的,則加號(+)char是空間的urlencode字符,否則它是更通常的%20。所以如果你的數據有一個加號,那麼Nancy會正確地解碼這個空間。嘗試在Nancy處理程序中對您的數據和單個解碼進行雙重編碼,或使用javascript的encodeURIcomponent()進行編碼。有關更多信息,請參見[URL編碼空格字符:+或%20?](http://stackoverflow.com/a/1634314/776476)。 – biofractal