2017-01-13 143 views
1

我想一個Filters對象以及其他東西作爲查詢參數傳遞到一個URL,例如像:傳遞對象爲URL參數C#

{ 
     "clientId": 2, 
     "date": "2017-01-01", 
     "filters": { 
      "days": { "monday", "tuesday", "wednesday" }, 
      "months": { "january", "february" } 
    } 

但我不知道怎麼的對象像本例中的filters可以通過查詢字符串參數傳入。我知道你通常會看起來像這樣:

https://localhost/path?clientId=2&date=2017-01-01&filters= ????? 

謝謝!

+0

如果您不能發佈數據,那麼你可以將該JSON字符串編碼爲base64,並將其作爲一個參數傳遞,然後在服務器上進行解碼和反序列化。 – Crowcoder

+0

如果不知道服務器如何期望該對象,很難說清楚。服務器是由你控制的嗎? – cubrr

+0

服務器是由我控制是和POST可能是可能的......但我不確定如何做到這一點也 – k1234

回答

2

如果發送數據比較複雜,而不是發送爲查詢字符串參數,那麼最好發送數據。但無論如何,如果你想發送的查詢字符串,你可以做以下操作:

  1. 轉換對象轉換成字符串
  2. 編碼字符串
  3. 追加爲參數

對於下列對象(轉換成字符串並刪除空格):

{ 
"clientId": 2, 
"date": "2017-01-01", 
"filters": { 
"days": { "monday", "tuesday", "wednesday" }, 
"months": { "january", "february" } 
} 

我創建了安全的通過網絡發送的編碼文本:

%7B%0A%22clientId%22%3A%202%2C%0A%22date%22%3A%20%222017-01-01%22%2C%0A%22filters%22%3A%20%7B%0A%22days%22%3A%20%7B%20%22monday%22%2C%20%22tuesday%22%2C%20%22wednesday%22%20%7D%2C%0A%22months%22%3A%20%7B%20%22january%22%2C%20%22february%22%20%7D%0A%7D 

你的情況,這將是:

https://localhost/path?clientId=2&date=2017-01-01&filters=%7B%0A%22clientId%22%3A%202%2C%0A%22date%22%3A%20%222017-01-01%22%2C%0A%22filters%22%3A%20%7B%0A%22days%22%3A%20%7B%20%22monday%22%2C%20%22tuesday%22%2C%20%22wednesday%22%20%7D%2C%0A%22months%22%3A%20%7B%20%22january%22%2C%20%22february%22%20%7D%0A%7D 

您可以使用meyerweb.com測試編碼/解碼,但在C#中你可以研究HttpUtility.UrlEncode()方法,它可以在你的情況下使用了。

+0

爲了好奇的緣故,如何做一個POST與這些數據然後如果這樣更好? – k1234

+0

@ keens12我假設你想從UI發佈到你在服務器端的動作。您可以使用AJAX進行POST請求。一些很好的例子,我在這裏解釋:http://stackoverflow.com/questions/4120212/mvc-ajax-json-post-to-controller-action-method當你發送數據與職位,他們被置於'身體'。 – kat1330

0

如果你真的想傳遞一個查詢字符串參數,這是一個使用ASP.NET MVC的例子。

創建路線: routes.MapRoute( name: "Custom", url: "{controller}/{action}/{clientId}/{date}/{filtersDay}/{filtersMonth}", defaults: new { controller = "Home", action = "CustomQueryString" } );

您可以重複的項目和模型綁定將創建一個字符串數組: http://localhost/Home/CustomQueryString?clientId=1&date=2017-01-01&filtersDay=Friday&filtersDay=Monday&filtersMonth=April&filtersMonth=June

,然後,你就會有這樣的: enter image description here