2017-09-01 7 views
3

私はGETリクエストでいくつかのパラメータをクエリ文字列のコントローラに送信しようとしています。クエリ文字列内にあるすべてのパラメータがDictionary<string, string>[FromQuery]を使用して取得されています。パラメータ名の1つにドット(.)の記号が含まれるまでうまくいきます。私はRequest.Queryオブジェクトをチェックして、それはよく解析されているように見えますが、私の辞書オブジェクトはこれを正しく取得しています。だから、[FromQuery]バインダーのバグのように見えるか、何か間違っています。 debbuged Request.Queryの値と鉱山以下parametersとコード: ?query=&InspectionType=Safety&ItemType=InspectionPoint&RecordParentGUID=9275bee2-0a2d-461c-8835-51880e76f035&parent.ResultClassCode=parent.ResultClassCodeASP.NETのコアFromQueryのドット記号が無効なパラメータを取得中

+1

確かに、あなたはhttp://github.com/aspnet/mvcにバグレポートを提出する必要があります。 DictionaryModelBinderProviderのコードを見てください。これは辞書にバインドするクラスです。 –

+1

あなたは '。'ドット文字はURIにエスケープされていますか? https://msdn.microsoft.com/en-us/library/system.uri.escapeuristring(v=vs.110).aspx –

+0

@MichalHaincドット記号は予約されていない文字なので、エンコードする必要はありません。 https://stackoverflow.com/questions/1455578/characters-allowed-in-get-parameter –

答えて

3

ようになります。 (ドット)、[と]文字は、モデルバインディングプロセスでパスの区切り文字としてASP.NET MVC Coreによって内部的に使用され、その周りに(AFAIK)はありません。

クエリ文字列から生の値にアクセスする場合は、Request.Queryがはるかに簡単な解決方法です。純粋Dictionary<string, string>にそれを回すために

Request.Query.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); 
+0

ええ、これは私がすでに行ったことです。バインダー自体の中に何らかのバグがあるかもしれないと思った。 –

+0

最高の答えを自由に受け入れてください。 –

+0

これを回避する方法として受け入れても、すでに問題はgithubで問題を作成していますが、まだ応答はありません。新しい情報があれば更新されます。 –

0

あなたがResultClassCodeするparent.ResultClassCodeを平らにする部分ビューを使用することができます:enter image description here

これは次のように送信されたクエリ文字列がどのように見えるかありますか?

部分は、この

@model parent 
<div class="form-group"> 
    <label asp-for="ResultClassCode"></label><span asp-validation-for="ResultClassCode" class="text-danger"></span> 
    <input asp-for="ResultClassCode" class="form-control"> 
</div> 
関連する問題