ASP.Net/C#将NameValueCollection转换为IDictionary?

时间:2013-04-24 20:54:57

标签: c# asp.net namevaluecollection

我正在努力帮助我的儿子升级我去年为他建造的网站。他想实施Amazon Simple Pay。我很接近它,但有一个错误,我不知道如何解决。这是一个用C#完成的ASP.Net站点。我是一名未受过培训的(自学成才的)开发人员,请用简单的语言说。 ; - )

在ASP.Net中,在表单中填写表单是不合法的,我需要进行表单POST。网上有一个非常漂亮的教程,展示了如何实现这一目标。如果您有兴趣看到该网址,则该网址为http://weblogs.asp.net/hajan/archive/2011/04/20/amazon-simple-pay-in-asp-net.aspx

交易必须“签名”,亚马逊提供SignatureUtils类来完成此任务。在那堂课中,我称之为:

public static string signParameters(IDictionary<String, String> parameters, String key, String HttpMethod, String Host, String RequestURI, String algorithm) 

杀死我的是IDictionary参数。我必须传递的是我用它构建的ListParams NameValueCollection:

public System.Collections.Specialized.NameValueCollection ListParams = new System.Collections.Specialized.NameValueCollection();

它给出了下面的错误,因为它无法将NameValueCollection转换为IDictionary。我试着明确转换它,但没有快乐。我该如何解决这个问题?

Error: Argument 1: cannot convert from 'System.Collections.Specialized.NameValueCollection' to 'System.Collections.Generic.IDictionary<string,string>'

3 个答案:

答案 0 :(得分:5)

您可以使用Cast

来实现
IDictionary<string, string> dict = ListParams.Cast<string>()
    .ToDictionary(p => p, p => ListParams[p]);

答案 1 :(得分:2)

您还可以通过NameValueCollection属性将Dictionary<string, string>“转换”为AllKeys

var dictionary = nameValueCollection.AllKeys
    .ToDictionary(k => k, k => nameValueCollection[k]);

答案 2 :(得分:1)

Shazzam !!得到它了!解决方案是更改Hajan提供的示例代码以实现Dictionary而不是NameValueCollection。然后我需要将PaymentGatewayPost中的while循环更改为foreach循环,如下所示:

foreach (KeyValuePair<string, string> pair in ListParams)
{
    System.Web.HttpContext.Current.Response.Write(string.Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">",
    pair.Key,
    pair.Value));
}

瞧!!它构建没有错误。

感谢大家的帮助。希望这将有助于其他正在努力使用Amazon Simple Pay的人。

相关问题