2016-01-29 27 views
0

我正在使用Angular的資源模塊訪問Web API,但由於API使用URI作爲主鍵,所以遇到了問題。冒號不在資源參數中被URL編碼

每當我嘗試打電話給這個API,傳入一個URI作爲字符串參數,我得到400 Bad Request錯誤。經過仔細觀察,Resource在URI中轉義所有正斜槓,而不是在開始時轉義冒號。它正在對一個如下所示的URL進行GET:http://myserver/api/objects/http:%2F%2Fexample.comk%2FmyURI%2F,這當然是無效的。我也嘗試用反斜槓轉義冒號,但這也不起作用。

我該如何讓資源正確逃避我的參數?在撥打電話之前,我已嘗試用%3A替換冒號,但導致%再次被編碼,返回404 Not Found

的業務處理資源是這樣的:

angular.module('adminApp').factory('MyObject', myObject); 

function myObject($resource) { 
    return $resource('/api/objects/:uri'); 
}; 

,我稱它是這樣的:

MyObject.get({ uri: myUri }, function(result) { 
... 
}); 
+0

您是否嘗試在冒號之前添加反斜槓? – Voreny

+0

@Voreny是的,它看起來像這樣:'http:// myserver/api/objects/http%5C:%2F%2Fexample.comk%2FmyURI%2F',所以沒有更好的! – Mourndark

回答

1

我已經通過將URI作爲查詢參數解決這個問題了而不是作爲請求URL的一部分。我通過將我的資源服務更改爲:

angular.module('adminApp').factory('MyObject', myObject); 

function myObject($resource) { 
    return $resource('/api/objects'); 
}; 

並使調用代碼保持不變。 ngResource然後創建一個GET,看起來像http://myserver/api/objects?uri=http:%2F%2Fexample.comk%2FmyURI%2F,這很好。

基本上,如果您在API參數中使用了不尋常的字符,請將它們放在查詢字符串中而不是URL中! :-)