2016-04-13 35 views
0

私は魅力的な新しいWebAPIにGETしています。私のパラメータの1つはencodeURIComponentを使用してエスケープするURLです。フィドラーでのリクエストは、C#MVC HTTP URLのASP.NET URLパラメータが正しくエンコードされていません

GET /api/myapi/myurl/https%3A%2F%2Ft.co%2FkIEnlT8Mvn HTTP/1.1 

のようになります。

はしかし、私は私のApplication_BeginRequestでリクエストを見れば、私は

?HttpContext.Current.Request.Url.AbsolutePath 
"/api/myapi/myurl/https:/t.co/kIEnlT8Mvn" 

?HttpContext.Current.Request.Url.AbsoluteUri 
"http://localhost:23652/api/myapi/myurl/https:/t.co/kIEnlT8Mvn" 

?HttpContext.Current.Request.Url.OriginalString 
"http://localhost:23652/api/myapi/myurl/https:/t.co/kIEnlT8Mvn" 

?Request.RawUrl 
"/api/myapi/myurl/https:/t.co/kIEnlT8Mvn" 

を取得するので、私の質問は:私はクライアントから送信されたもののうち、正しいURLを取得できますか?私は

良いURLのhttpsのいずれかを取得したい:SlashSlasht.co/kIEnlT8Mvn(SO短いURLを嫌っているので//が変更)

または

のhttps%3A%2F%2Ft.co%2FkIEnlT8Mvn

ないのhttps:

/t.co/kIEnlT8Mvnは(私も同じ結果で、エスケープ()とにencodeURL()でURLをエンコードしようとしました。)

答えて

1

スラッシュがありますURLパーツ間の区切りであり、.NETまたはMVCの内部に何かがあるか、またはルーティングシステムが繰り返しスラッシュを削除することでこれについて厳密に動作しています。それが解決できるかどうかわかりません。

は、私はあなたがこのようにAPI &あなたは、クエリ文字列パラメータを使用するようになっているコール、何かの両方を変更することができれば、それが動作すると思います:

GET /api/myapi/myurl?address=https%3A%2F%2Ft.co%2FkIEnlT8Mvn HTTP/1.1

public ActionResult MyUrl(string address) 
{ 
    // do your magic here... 
} 
+0

いやが、それは理にかなっています。既存のハンドラにコードを追加してURLを修正しましたが、あなたのソリューションはおそらくもっと良いでしょう。私はそれができるだけ周りに少しでもぎこちなく動くようにしたいので、私はそれをすることの私の全体の方法を変更するかもしれません。 – weloytty

関連する問題