2017-01-13 144 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