C# 如何传递名称包含连字符的查询字符串参数?

C# 如何传递名称包含连字符的查询字符串参数?,c#,asp.net-mvc,asp.net-mvc-4,query-string,C#,Asp.net Mvc,Asp.net Mvc 4,Query String,我需要将查询字符串传递给重定向。我知道你可以这样做: return RedirectToAction("Index", new { param1 = "hello" }); 将转到/Index?param1=hello 但是我需要传递一个名称中有连字符的参数。让我们称之为“数据参数”。因为C#name中不允许使用连字符,所以我不能用上面的方法来实现。我知道在MVC的某些地方,下划线用于处理这个问题,但在这里也不起作用,下划线按原样传递给查询字符串 所以我

我需要将查询字符串传递给重定向。我知道你可以这样做:

return RedirectToAction("Index", new { param1 = "hello" });
将转到
/Index?param1=hello

但是我需要传递一个名称中有连字符的参数。让我们称之为
“数据参数”
。因为C#name中不允许使用连字符,所以我不能用上面的方法来实现。我知道在MVC的某些地方,下划线用于处理这个问题,但在这里也不起作用,下划线按原样传递给查询字符串

所以我的问题是,如何重定向到
/Index?data param=hello

如果您试图构建一个url,您总是可以稍微绕过MVC路由,以老式的方式传递完整的url

string dataParam="hello";
int otherParam=5;
return Redirect( String.Format("/Index?data-param={0}&data-param2={1}", dataParam, otherParam) );
如果您要脱离自己的MVC应用程序,那么您可能无论如何都不希望
重定向到操作
,除非您重定向到操作。

这是可行的(我使用的是ASP.NET Core 3.1,无法与早期版本对话):


还请注意,此字典技术也适用于其他方法,如
redirectoroute()

当您说需要传递带有连字符名称的参数时,这是一个关键要求吗?有时候,最简单的解决办法就是顺其自然。但是,我认为自第2版以来,这一点没有太大变化,因此您可以查看:不幸的是,这是针对第三方库的,所以是的,我确实需要将其连字符传递。在搜索有关此主题的帮助时,我确实遇到了链接问题,但这似乎不是我在这里寻找的内容。我(可能很明显)对MVC和ASP非常陌生,所以我可能会错过一些东西。我的意思是,链接的问题是关于从包含连字符的第三方库接收参数,但我想要的是相反的-将参数发送到第三方库。索引控制器是MVC应用程序的一部分,但在它呈现的视图中是使用第三方库的组件,它从查询字符串中获取所需的数据。由于我是MVC新手,我不能完全确定使用重定向而不是重定向操作的后果,但在这种情况下它似乎是有效的,所以谢谢!基本上,RedirectToAction将管理大量与查找应用程序根目录和整理路径(如果需要)相关的工作。在可以使用的地方使用它很方便,但只要您意识到需要关注路径(例如,当您在虚拟目录中而不是在站点根目录中运行时),那么绕过它并没有什么害处-Url应该以任何方式工作。看起来实现这一点的更好方法是使用Url.Action(“Index”)获取索引控制器的URL,而不是在字符串中对其进行硬编码,并如上所述使用重定向。是的,但仅当您在自己的应用程序中重定向时。这个动作路由只会找到它知道的动作,所以如果你想把数据发送到你朋友在另一台服务器上的PHP应用程序,那你就不走运了。
var params = new Dictionary<string, string>()
{
    { "data-param1", "hello" }
    { "data-param1", "2" }
};
return RedirectToAction("Index", params);
var params = new Dictionary<string, object>()
{
    { "data-param1", "hello" }
    { "data-param2", 2 }
};
return RedirectToAction(nameof(Index), params);