在C#ASP.NET(esp MVC 5)上处理亚马逊产品广告API是否有更有效的方法?

在C#ASP.NET(esp MVC 5)上处理亚马逊产品广告API是否有更有效的方法?,c#,asp.net,asp.net-mvc,amazon-web-services,C#,Asp.net,Asp.net Mvc,Amazon Web Services,我终于在我的MVC5站点上使用了亚马逊产品广告API。我使用的是“SignedRequestHelper”类,它是从Amazon站点下载的一个类中提供的。实际上,我已经获得了对AmazonAPI的引用,但我目前似乎根本没有使用它 到目前为止,我使用的是(控制器): SignedRequestHelper=新的SignedRequestHelper(“myAWSaccessKeyID”, “mysecretKey”、“webservices.amazon.co.uk”); 字典项=新字典(); 添

我终于在我的MVC5站点上使用了亚马逊产品广告API。我使用的是“SignedRequestHelper”类,它是从Amazon站点下载的一个类中提供的。实际上,我已经获得了对AmazonAPI的引用,但我目前似乎根本没有使用它

到目前为止,我使用的是(控制器):

SignedRequestHelper=新的SignedRequestHelper(“myAWSaccessKeyID”,
“mysecretKey”、“webservices.amazon.co.uk”);
字典项=新字典();
添加(“服务”、“AWSECommerceService”);
添加(“操作”、“项目搜索”);
添加(“AWSAccessKeyId”、“myAWSaccessKeyID”);
项目。添加(“AssociateTag”、“myTag”);
添加(“搜索索引”,搜索索引)//这是一个字符串值(选择框)
添加(“响应组”、“图像、项目属性、报价完整、报价、报价摘要、评论”);
添加(“关键字”,关键字)//这是一个字符串值
string requestUrl=helper.Sign(项目);
ViewBag.Stuff=requestUrl//只是为了让我能看到整个网址!
WebRequest=HttpWebRequest.Create(requestUrl);
WebResponse=request.GetResponse();
XmlDocument doc=新的XmlDocument();
doc.Load(response.GetResponseStream());
XmlNodeList titleNodes=doc.GetElementsByTagName(“项目”);
ViewBag.Titles=标题节点;
您可能会注意到,我部分地复制了scratch pad中的JAVA代码样式

从这一点上看,我只是处理每一部分。这是一种混乱和可怕的处理开关如下:

foreach (System.Xml.XmlNode item in ViewBag.Titles)
{
    <h3>Item: @count</h3>
    foreach (System.Xml.XmlNode child in item.ChildNodes)
    {
        switch (child.Name)
        {
            case "ASIN":
                <p>ASIN: @child.InnerText</p>
                break;
            case "MediumImage":
                <img src="@child.ChildNodes[0].InnerText" />
                break;
            case "ItemAttributes":
                foreach (System.Xml.XmlNode child1 in child.ChildNodes)
                {
                    if(child1.Name == "Title")
                    {
                        <p>@child1.InnerText</p>
                    }
                }
                break;
        }

    }
    count++;
}
foreach(ViewBag.Titles中的System.Xml.XmlNode项)
{
物品:@count
foreach(item.ChildNodes中的System.Xml.XmlNode子节点)
{
开关(子项名称)
{
案例“ASIN”:
ASIN:@child.InnerText

打破 案例“MediumImage”: 打破 案例“ItemAttributes”: foreach(child.ChildNodes中的System.Xml.XmlNode child1) { 如果(child1.Name==“Title”) { @child1.InnerText

} } 打破 } } 计数++; }
它可以工作,我可以使用XML文档等。我只需要知道是否有办法更改它,以便它实际使用作为参考的API部分。我宁愿使用适当的工具,也不愿像这样使用原始XML。我很难连接到Amazon文档,所以我基本上只是尝试在Amazon的scratchpad上用JAVA风格的代码连接。您还可以找到以及如何使用它的API


用于.NET的AWS SDK包括以下内容:

  • 用于.NET的AWS SDK的当前版本
  • 用于.NET的AWS SDK的所有早期主要版本
  • 示例代码演示了如何将AWS SDK for.NET与多个AWS服务一起使用

有一个库,它对处理亚马逊产品广告API(PAAPI)非常全面。当您发出请求时,您可以收到各种响应,但这个库可以处理所有响应!它读取XML并将所有信息放入一个对象中

我现在正在两个与PAAPI交互的MVC5站点上工作。我有一个单独的文件夹,其中包含文件和我编写的几个文件,通过从库创建的对象中提取所需的数据来发出请求和处理响应

我制作了一个C#控制台应用程序演示,您可以在这里查看:

我以此作为指导:

但是,我遇到了几个错误:

  • 在某些情况下,大型响应需要您修改 MaxReceivedMessageSize并在演示中显示
  • 我在库中的ImageSets[]中遇到错误。也许人们有,解决办法是

  • 我相信我现在终于找到了一种使用Amazon Prod Adv API的方法。问题是如何使用最新的API(我作为参考添加的API)对请求进行签名。该参考以类似的方式添加到《入门指南》中,尽管该指南引用的是VS2005。这显然是10年前的事了,但不知怎么的,我确实是通过解决一些问题来实现的。我只是从来没有得到正确的签名,所以我最终使用了可怕的REST bodge(在我最初的问题中)

    现在帮助我的帖子是:


    这就是被标记为答案的那个。它只有4张赞成票,但这是我发现的最好的东西。我将所有类放入控制器中进行测试,但现在我必须使用模型或扩展类正确地进行测试。尽管如此,它仍然有效。

    您可以使用以下nuget软件包

    PM> Install-Package Nager.AmazonProductAdvertising
    
    控制器示例

    public ActionResult ProductSearch(string search)
    {
        var authentication = new AmazonAuthentication();
        authentication.AccessKey = "accesskey";
        authentication.SecretKey = "secretkey";
    
        var wrapper = new AmazonWrapper(authentication, AmazonEndpoint.DE);
        var result = wrapper.Search(search);
    
        return View(result);
    }
    
    示例视图

    @model Nager.AmazonProductAdvertising.Model.AmazonItemResponse
    @{
        ViewBag.Title = "Search";
    }
    
    <table class="table">
    <tr>
        <th>ASIN</th>
        <th>SalesRank</th>
    </tr>
    @foreach (var item in Model.Items.Item)
    {
        <tr>
        <td>@item.ASIN</td>
        <td>@item.SalesRank</td>
        </tr>
    }
    </table>
    
    @model Nager.AmazonProductAdvertising.model.amazonimresponse
    @{
    ViewBag.Title=“搜索”;
    }
    阿辛
    SalesRank
    @foreach(Model.Items.item中的var项)
    {
    @项目1.ASIN
    @item.SalesRank
    }
    
    我做了大量的研究,试图找到一种将此API与ASP.NET结合使用的官方方法,对此您一定会感到惊讶。我想那看起来像是我想要的那种东西。我想我可能在nuget上看到过这一点,但下载量太少让我很反感。我发现亚马逊的问题在于,他们到处都有太多的文档和不同的工具。@CheesutosToast他们也支持github存储库,而且我看到他们的贡献经常相信你可以从他们的源代码中找到一些有趣的东西。@CheesutosToast我的一个朋友实际上是作为软件在亚马逊AWS中工作的工程师。他还说,他们的文件中有混乱。。。大量冗余且无用的信息。:)官方的“入门”指南提供了以下信息:
    @model Nager.AmazonProductAdvertising.Model.AmazonItemResponse
    @{
        ViewBag.Title = "Search";
    }
    
    <table class="table">
    <tr>
        <th>ASIN</th>
        <th>SalesRank</th>
    </tr>
    @foreach (var item in Model.Items.Item)
    {
        <tr>
        <td>@item.ASIN</td>
        <td>@item.SalesRank</td>
        </tr>
    }
    </table>