2016-08-12 11 views
2

パラメータのいくつかがドル記号($)で始まるクエリ文字列を私に送信しているクライアントがあります。 C#でパラメータの名前を$で開始することはできません。つまり、アクションが呼び出されたときに値がマッピングされていないことを意味します。ASP.NET Web APIで不正なクエリ文字列パラメータ名を処理する

誰かが尋ねる前に、クライアントにクエリ文字列の名前を変更させることはできません。

私は、これらのパラメータを見つけて名前を変更し、正しいアクションに渡すために何らかの種類のカスタムアクションフィルタを作成する必要があると感じています。しかし、私がすべてをやる前に、ここで質問を投稿して、私には解決策がないかどうかを知りたいと思っていました。

ありがとうございます!

+0

どのバージョンのWeb APIですか? – derloopkat

答えて

0

それはURI定義に予約されているよう残念なことに、$は

What does dollar sign $ do in url?

、パラメータ名の一部として使用すべきではないので、あなたが受けているクエリ文字列が正式に間違っている、と最善の解決策将来のHttpの実装やファイアウォールによってもあなたのソリューションが壊れる可能性があるため、それを変更することになります。

https://msdn.microsoft.com/en-us/library/system.web.httprequest.url(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.web.httprequest.rawurl(v=vs.110).aspx

+0

このニュースはodataの人々に大きな衝撃となるだろう – John

+0

同意する...私は約10年前にODataを定義するのに参加したチームと一緒にいたが、これは進められたが進歩しなかった。 –

0

この:周り

仕事はHttpRequestのプロパティのURL(多分クエリメソッド)やRawUrlを使用して、クエリ文字列パーサをオーバーライドし、直接URIにアクセスすることですどのように問題を処理したのですか:

[HttpGet, Route("myResource")] 
    public virtual IHttpActionResult GetThings() 
    { 
     var query = HttpUtility.ParseQueryString(Request.RequestUri.Query); 
     var queryParam = query["$myParam"]; 

     return Ok(); 
    } 
関連する問題