2017-04-26 1 views
2

と私はこれが代わるラインスウィフトURL appendPathComponentは? %の3F

var url = URL(string: MyRouter.baseURLString)! 

url.appendPathComponent(relativePath) 

が含まれているルータを持っています "?" "%3F"はAPIサーバーによって拒否されます。これをどうすれば解決できますか?その文字をエンコードするのは間違いです。

+0

「?」を含めるのは間違いです。パスコンポーネントに挿入します。これはパスとクエリの間のセパレータとして使用されるため、実際にパスに入れたい場合は%エンコードされている必要があります。 'https://example.com?name = value'のようにクエリを使ってURLを作成したい場合は、' URLComponents'を使うか、単に文字列連結を使うことができます。 – OOPer

+0

文字列連結を使用するように変更しました。相対パスは/ search?since = 1 – markhorrocks

+0

形式になっています。正常に作成しましたか?今でも問題がある場合は、質問を編集して詳細を追加してください。 – OOPer

答えて

4

?はパスの一部ではないためです。これは、クエリ文字列の先頭を示すための区切り文字です。 URLのさまざまなコンポーネントについては、this articleで読むことができます。各コンポーネントには有効な文字セットがあり、そのセットにないものはパーセントエスケープする必要があります。最適なオプションは、自動的にエスケープ処理を行うURLComponentsを使用することです:

var urlComponents = URLComponents(string: MyRouter.baseURLString)! 
urlComponents.queryItems = [ 
    URLQueryItem(name: "username", value: "jsmith"), 
    URLQueryItem(name: "password", value: "password") 
] 

let url = urlComponents.url! 
関連する問題