将对象作为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"}})