2017-09-01 46 views
3

我想用查詢字符串中的控制器發送GET請求的一些參數。我使用[FromQuery]將查詢字符串內部的所有參數都設置爲Dictionary<string, string>。它運行良好,直到參數名稱中的一個包含點(.)符號。我檢查了Request.Query對象,它看起來很好解析,但我的Dictionary對象得到這個,確切的項目是錯誤的。所以它看起來像[FromQuery]活頁夾中的錯誤,或者我做錯了什麼。 enter image description hereASP.NET核心FromQuery獲取內部帶點符號的無效參數

這是發送貌似查詢字符串如何: ?query=&InspectionType=Safety&ItemType=InspectionPoint&RecordParentGUID=9275bee2-0a2d-461c-8835-51880e76f035&parent.ResultClassCode=parent.ResultClassCode

+1

事實上,你應該文件中http://github.com/aspnet/mvc的bug報告。您可以查看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

你會使用局部視圖來拉平parent.ResultClassCode到ResultClassCode與和Request.Query debbuged值低於礦山parameters代碼?

的部分看起來是這樣的

@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>