将对象作为url参数传递给c#

将对象作为url参数传递给c#,c#,object,url,parameters,C#,Object,Url,Parameters,我想将过滤器对象以及其他东西作为查询参数传递到url中,例如: { "clientId": 2, "date": "2017-01-01", "filters": { "days": { "monday", "tuesday", "wednesday" }, "months": { "january", "february" } } 但我不知道像本例中的filters这样的对象如何通过查询

我想将
过滤器
对象以及其他东西作为查询参数传递到url中,例如:

   { 
       "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= ?????

谢谢

如果数据很复杂,最好发布它们,而不是作为查询字符串参数发送。但无论如何,如果要作为查询字符串发送,可以执行以下操作:

  • 将对象转换为字符串
  • 编码字符串
  • 追加为参数
  • 对于以下对象(转换为字符串并删除空格):

    我创建了可通过网络安全发送的编码文本:

    %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
    

    您可以使用测试编码/解码,但在C语言中,您也可以研究在您的情况下使用的方法。

    如果您确实想在查询字符串中传递参数,这是一个使用ASP.NET MVC的示例

    创建路线:
    
    routes.MapRoute(
    名称:“海关”,
    url:“{controller}/{action}/{clientId}/{date}/{filtersDay}/{filtersMonth}”,
    默认值:新建{controller=“Home”,action=“CustomQueryString”}
    );
    

    您可以重复一个项,模型绑定将创建一个字符串数组:

    然后,你会有这个:

    我有一个ToDictionary扩展方法,它将对象转换为查询字符串,您可以通过RouteValues传递它,我传递Model.SearchCriteria,它在下面的示例中是一个复杂的对象:

    <a href='@Url.Action("ExportAll", 
        new RouteValueDictionary(Model.SearchCriteria))'>Export All</a>
    
    这是因为此版本的ActionLink接受RouteValue作为对象,而不是作为RouteValueDictionary(在MVC5中)。因此,为了使其正常工作,我还必须将Html属性转换为字典,该字典使用正确的Html.ActionLink重载:

    @Html.ActionLink("Export All", "ExportAll", 
          new RouteValueDictionary(Model.SearchCriteria.ToDictionary()), 
          new Dictionary<string,object>{{"class","btn btn-default"}})
    
    @Html.ActionLink(“全部导出”、“全部导出”,
    新的RouteValueDictionary(Model.SearchCriteria.ToDictionary()),
    新字典{{“类”,“btn btn默认值”})
    
    如果无法发布数据,则可以将该JSON字符串编码为base64,并将其作为一个参数传递,然后在服务器上进行解码和反序列化。如果不知道服务器对对象的期望值,很难判断。服务器是由你控制的吗?服务器是由我控制的。是的,然后发布一篇文章可能是可能的……但我不确定如何做到这一点,或者出于好奇,如果这样更好的话,如何使用这些数据发布一篇文章?@keens12我假设你想从用户界面发布到服务器端的操作。您可以使用AJAX发出POST请求。我在这里解释了一些很好的例子:当你用post发送数据时,它们被放在“body”中。post不是用来更改数据库的吗?get只是用来检索一些东西?在这种情况下,帖子怎么会更好?@Chucky,这是真的。但是如果你想发送有效载荷呢?如何使用
    GET
    public static class ToDictionaryExtensionMethod
    {
        public static IDictionary<string, object> ToDictionary(this object source)
        {
            return source.ToDictionary<object>();
        }
    }
    
    @Html.ActionLink("Export All", "ExportAll", 
          new RouteValueDictionary(Model.SearchCriteria.ToDictionary()), 
          new { @class = "btn btn-default" })
    
    @Html.ActionLink("Export All", "ExportAll", 
          new RouteValueDictionary(Model.SearchCriteria.ToDictionary()), 
          new Dictionary<string,object>{{"class","btn btn-default"}})