我正在努力帮助儿子升级我去年为他建立的网站。他想实现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

必须对交易进行“签名”,Amazon提供一个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>'

最佳答案

您可以使用Cast做到这一点:

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

10-07 20:09
查看更多