navi G Ответов: 1

Как начать использовать amazon api ASP.NET с#


привет
я только начинаю использовать AMAZON API в своем ASP.NET веб-сайт. проблема в том, что я много ищу об amazon api, что, как использовать его в asp.net c# но я не мог найти ничего лучшего для моего понимания. я просто новичок в api, поэтому хочу просто простой код, чтобы показать продукты на моем сайте со ссылкой на покупку.

Я нашел пример кода, но есть некоторые ошибки, такие как " удаленный сервер вернул ошибку: (400) плохой запрос"
Поэтому, пожалуйста, ребята, помогите мне исправить ошибки или предоставьте мне какой-нибудь лучший код

СПАСИБО

Что я уже пробовал:

public partial class _Default : System.Web.UI.Page
     {
        //Set your Access Key and Secret Key in following variables.
        private const string MY_AWS_ACCESS_KEY_ID = "my access key";
        private const string MY_AWS_SECRET_KEY = "my secret key";
    private const string DESTINATION = "ecs.amazonaws.com";
    

    protected void Page_Load(object sender, EventArgs e)
    {
       
    }

    protected void btnSearch_Click(object sender, EventArgs e)
    {
        //Use SignedRequesthelper class to generate signed request. 
        SignedRequestHelper helper = new SignedRequestHelper(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY, DESTINATION);

        IDictionary<string, string> requestParams = new Dictionary<string, String>();
        requestParams["Service"] = "AWSECommerceService";
        //Leave following line commented if you want to use latest version of Amazon API. You can uncomment this line to use a specific version.
        requestParams["Version"] = "2009-03-31";
        //requestParams["Operation"] = "ItemLookup";
        requestParams["Operation"] = "ItemSearch";
        requestParams["SearchIndex"] = selectCategories.Value;
        requestParams["Keywords"] = txtSearch.Text;

        //Get signed URL in a variable
        string requestUrl = helper.Sign(requestParams);
  
        //Get response from signed request
        DataSet DS = GetData(requestUrl);

        if (DS != null)
        {
            //Bind ItemAttributes table returned in dataset. This will give you product details.
            gridViewAttributes.DataSource = DS.Tables["ItemAttributes"];
            gridViewAttributes.DataBind();

            //Bind Item table returned in dataset. This will give you product link page.
            gridViewItem.DataSource = DS.Tables["Item"];
            gridViewItem.DataBind();
            lblError.Text = "";

            //You can set debug point here and inspect content of Datased(DS).
            //it has few more tables that you might be interested in.
        }
    }
        DataSet GetData(string signedurl)
    {
        try
        {
            //Create a request object using signed URL.
            WebRequest request = HttpWebRequest.Create(signedurl);
            //Get response in a stream          
            //WebRequest request = HttpWebRequest.Create(url);
            //WebResponse response = request.GetResponse();
            Stream responseStream = request.GetResponse().GetResponseStream();
            
          //  Stream responses = request.GetResponse().GetResponseStream();
            DataSet DS = new DataSet();
            //Read returned resonpse stream into a dataset.
            //Note: You can also use XMLDocument element here to read response.
            DS.ReadXml(responseStream);
            responseStream.Close();

            return DS;
        }
        catch (Exception e)
        {
            //If there is an error capture it.
            //If you get an error, it could be either because of invalid keyword or you provided wrong access key.
            lblError.Text = e.Message;
            Response.Write("Caught Exception: " + e.Message);
            Response.Write("Stack Trace: " + e.StackTrace);
        }

        return null;
    }

manibsharma

Похоже, вам не хватает какого-то параметра для передачи. Просто убедитесь, что у вас есть URL-адрес и параметры правильно на месте. Пожалуйста, предоставьте трассировку стека ошибок, чтобы подробнее ознакомиться с деталями.

navi G

Пойманное исключение: удаленный сервер вернул ошибку: (400) плохой запрос.Трассировка стека: at System.Net.HttpWebRequest.GetResponse() at _Default.GetData(строка signedurl)

1 Ответов

Рейтинг:
6

manibsharma

вы упускаете Подпись &усилитель; отметка времени параметры. Также проверьте URL-адрес вашего сервиса, он должен быть [Ссылка на услугу]

Я смог получить доступ к сервису со следующими параметрами.

[Ссылка на сервис с параметрами]


OriginalGriff

Пожалуйста, не делайте репост, если ваша заявка не сразу видна: Вы были отправлены на модерацию, где человек должен решить, подходит ли она для публикации.
Я удалил два запасных ответа.

manibsharma

Большое спасибо за информацию. В следующий раз я буду осторожен

OriginalGriff

Пожалуйста!

navi G

привет манибшарма

Спасибо, дорогая, я ценю твою помощь.
но я хочу задать еще несколько вопросов . 1 здесь у меня есть Поделиться еще немного информации о моем примере кода это от SignRequestHelper. cs plse скажите мне, что не так с его. я проверил код с вашими предложениями, такими как подпись и временная метка . это уже предусмотрено в примере кода . и если вы думаете, что есть проблема в коде, то plse скажите мне, что я должен делать. plse это более понятно для меня если вы поможете мне с редактированием моего кода и постом спасибо

navi G

использование системы;
использование системы.Коллекции.Общий;
используя системы.Текст;
использование системы.Сеть;
использование системы.Безопасность.Криптография;

пространство имен AmazonProductAdvtApi
{
публичный класс SignedRequestHelper
{
конечная точка частной строки;
частная строка akid;
//частная строку associateTag;
частный байт [] секретный;
частная ксом подписавшего;

private const string REQUEST_URI = "/onca / xml";
private const string REQUEST_METHOD = " GET";

//
// * Используйте этот конструктор для создания объекта. Учетные данные AWS доступны на
// * http://aws.amazon.com
// *
// * Пункт назначения - это конечная точка обслуживания вашего приложения:
// * США: ecs.amazonaws.com
// * ДП: ФОВ.amazonaws.ДЖП
// * Великобритания: ecs.amazonaws.co.uk
// * Де: ecs.amazonaws.de
// * Фр: ecs.amazonaws.fr
// * Ка: ФОВ.amazonaws.Калифорния
//

общественные SignedRequestHelper(строка awsAccessKeyId, awsSecretKey строку, строку назначения)
{
this. endPoint = пункт назначения.Нижестоящим();
this. akid = awsAccessKeyId;
это.секрет = кодировка.Кодировке utf8.Метод getbytes(awsSecretKey);
//это.associateTag = associateTag;
это.подписант = новый тип hmacsha256(это.секрет);
}

//
// * Подпишите запрос в виде словаря пар имя-значение.
// *
// * Этот метод возвращает полный URL-адрес для использования. Изменение возвращаемого URL-адреса
// * в любом случае аннулирует подпись, и Amazon отклонит запросы.
//

публичный строковый знак(IDictionary & lt;string, string> request)
{
// Используйте SortedDictionary, чтобы получить параметры в естественном порядке байтов, как
// требуется AWS.
ParamComparer pc = новый ParamComparer();
Словаре sorteddictionary&ЛТ;строку, строку&ГТ; sortedMap = новый словаре sorteddictionary&ЛТ;строку, строку&ГТ;(по запросу, ПК);

// Добавьте AWSAccessKeyId и метку времени к запросам.
sortedMap ["AWSAccessKeyId"] = this. akid;
sortedMap ["Timestamp"] = это.GetTimestamp();
//sortedMap["AssociateTag"] = это.associateTag;
// Получить каноническую строку запроса
строка canonicalQS = this.ConstructCanonicalQueryString(sortedMap);

// Derive байты должны быть подписаны.
StringBuilder builder = новый StringBuilder();
строитель.Добавить(методы).Добавить ("\n").Добавить(это.конечной точки).Добавить ("\n").Append(REQUEST_URI).Добавить ("\n").Добавить(canonicalQS);

string stringToSign = строитель.Метод toString();
байт[] на предмет заключения = кодировка.Кодировке utf8.GetBytes(stringToSign);

// Вычисления подписи и преобразовать в base64.
byte[] sigBytes = signer.Метода computehash(предмет заключения);
строковая подпись = преобразовать.ToBase64String(sigBytes);

// теперь постройте полный URL-адрес и вернитесь к вызывающему.
QsBuilder то StringBuilder новое окно инструментов();
qsBuilder.Append ("http://"). Append(this.endPoint).Append(REQUEST_URI).Добавить("?").Добавить(canonicalQS).Добавить("&амп;подпись=").Append (это.PercentEncodeRfc3986(подпись));

верните qsBuilder.Метод toString();
}

//
// * Подпишите запрос в виде строки запроса.
// *
// * Этот метод возвращает полный URL-адрес для использования. Изменение возвращаемого URL-адреса
// * в любом случае аннулирует подпись, и Amazon отклонит запросы.
//

публичный строковый знак(string queryString)
{
IDictionary< string, string & gt; request = this.CreateDictionary(строка запроса);
верни это.Знак (запрос);
}

//
//

navi G

публичный строковый знак(string queryString)
{
IDictionary< string, string & gt; request = this.CreateDictionary(строка запроса);
верни это.Знак (запрос);
}

//
// * Текущее время в формате IS0 8601 в соответствии с требованиями Amazon
//

частная строка GetTimestamp()
{
Текущее время датавремя = Датавремя.UtcNow;
строка timestamp = currentTime.ToString ("YYYY-MM-DDTHH:MM:SS");
метка времени возврата;
}

manibsharma

Эй, Нави, этот код выглядит совсем не так, как оригинальный. в чем заключается ошибка, которую вы получаете сейчас?

navi G

Спасибо, что вы мне отвечаете.

Эй, на самом деле это ссылочный код requesthendlar.cs . я просто хочу знать, где я должен разместить URL-адрес, который вы мне предоставили . (спасибо)