我已经看了一段时间,感觉自己有些愚蠢,希望能有更多的人帮忙看看。
我需要生成一个完整的URL(例如: http://www.domain.com/controller/action?a=1&b=2
),通常我只需使用Url.Action
来指定协议,没有任何问题:
var url = Url.Action("Action", "Controller", new { a = 1, b = 2 }, "http");
我已经开始编写一个类,返回一个RouteValueDictionary
以消除这些匿名对象。然而,我无法使它与助手一起工作。
var x = Url.Action("Action", "Controller", new RouteValueDictionary(new { a = 1, b = 2 }), "http");
// "http://127.0.0.1/Controller/Action?Count=2&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D",
var y = Url.Action("Action", "Controller", new { a = 1, b = 2 }, "http");
// "http://127.0.0.1/Controller/Action?a=1&b=2"
非常感谢任何能带来"facepalm"(手掌自我打击)效果的指点 :)
更新:
最好澄清一下,在上面的示例中,我需要正确使用'X
'变量,因为RouteValueDictionary在代码其他地方创建。假设RouteValueDictionary是正确的。
我只是不明白为什么使用匿名对象可以正常工作,但是将同一对象包装在RouteValueDictionary
中就会使助手程序出错。