我正在帮我儿子升级我去年为他建的一个网站。他想实现Amazon Simple Pay。我已经非常接近它了,但是我有一个错误,我不知道如何解决。这是一个用C#创建的ASP.Net站点。我是一个未经培训(自学)的开发人员,所以请简单地说。;-)
在ASP.Net中,在表单中包含表单是不合法的,我需要执行表单发布。网上有一个相当流畅的教程,展示了如何实现这一点。这个网址是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。我试过显式转换,但没有转换到joy。我该如何解决这个问题呢?
Error: Argument 1: cannot convert from 'System.Collections.Specialized.NameValueCollection' to 'System.Collections.Generic.IDictionary<string,string>'发布于 2013-04-25 22:00:05
沙扎姆!!明白了!解决方案是更改Hajan提供的示例代码,以实现字典而不是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));
}瞧!!它的构建没有错误。
感谢大家的帮助。希望这能帮助其他正在亚马逊简单支付中苦苦挣扎的人。
发布于 2013-04-25 05:06:25
您可以使用Cast来实现这一点
IDictionary<string, string> dict = ListParams.Cast<string>()
.ToDictionary(p => p, p => ListParams[p]);发布于 2016-12-02 07:42:06
您还可以通过查看NameValueCollection的AllKeys属性将其“转换”为Dictionary<string, string>:
var dictionary = nameValueCollection.AllKeys
.ToDictionary(k => k, k => nameValueCollection[k]);https://stackoverflow.com/questions/16201988
复制相似问题