2010-01-08 14 views
0

http://www.dscredstorm.com/getisbninfo.aspxC# 'using' Est-ce que je fais ça correctement? (Inaccessable en raison du niveau de protection)

J'essaie d'utiliser l'API d'Amazon. J'ai téléchargé leur exemple de code, qui est une application de formulaire C# Windows, mais je me suis dit que cela devrait fonctionner pour un site Web C# aussi, correct? SignedRequestHelper.cs est un fichier qui semble avoir certaines fonctionnalités dont j'ai besoin pour envoyer une demande signée. Son espace de noms est AmazonProductAdvtApi. J'ai mis le fichier dans App_Code/Csharp et j'ai ajouté 'using AmazonProductAdvtApi;' à ma page

Mais je reçois cette erreur: 'AmazonProductAdvtApi.SignedRequestHelper' est inaccessible en raison de son niveau de protection

Pourquoi?

Plus d'informations: SignedRequestHelper helper = new SignedRequestHelper (accessKeyId, secretKey, destination);

Voir: http://www.dscredstorm.com/getisbninfo.aspx

Voici la déclaration de classe pour SignedRequestHelper.cs:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Web; 
using System.Security.Cryptography; 

namespace AmazonProductAdvtApi 
{ 
    class SignedRequestHelper 
    ... 
    ... some private consts and vars... 

    public SignedRequestHelper(string awsAccessKeyId, string awsSecretKey, string destination) 
    { 
     this.endPoint = destination.ToLower(); 
     this.akid = awsAccessKeyId; 
     this.secret = Encoding.UTF8.GetBytes(awsSecretKey); 
     this.signer = new HMACSHA256(this.secret); 
    } 
+0

Afficher un code de la façon dont vous essayez de l'utiliser, et où l'erreur se produit? –

+0

Tout comme un fyi, vous pouvez désactiver les informations d'erreur ASP.NET détaillées. Vous ne voulez probablement pas que le monde entier voie votre source s'il y a une erreur. Le paramètre est dans web.config – Kyle

+0

À quoi ressemble la déclaration de la classe? Est-ce interne? –

Répondre

1

La classe n'est pas marquée public; par conséquent, il est inaccessible à partir d'autres espaces de noms. Il est probable que les autres classes Amazon qui l'utilisent se trouvent également dans l'espace de noms AmazonProductAdvtApi, donc elles n'ont pas de problèmes (une classe sans visibilité explicite obtient par défaut internal). Si vous souhaitez utiliser cette classe, remplacez sa déclaration par public class SignedRequestHelper. Sachez simplement que la classe peut ne pas être destinée à la consommation publique, c'est-à-dire qu'elle peut manquer de certains types de vérification d'erreurs auxquels vous vous attendez normalement dans une API publique.

+0

Ah, d'accord. Je supposais qu'Amazon nous fournirait quelque chose avec lequel nous pourrions simplement jouer avec le plug-and-play. – Chris

+0

Je suis sûr qu'ils l'ont fait, mais cela ne signifie pas nécessairement qu'ils veulent que vous jouiez avec * tout * dans la source. Il est clair qu'il est destiné à être utilisé par d'autres classes dans l'espace de noms 'AmazonProductAdvtApi'. – Aaronaught

+0

Très probablement. Je sors juste de l'exemple de code fourni. Je continuerai à faire des recherches je suppose. – Chris

0

« inaccessible en raison de son niveau de protection » signifie que vous essayez de faire référence à un élément en dehors de son champ d'application prévu, c'est-à-dire créer une instance d'une classe privée à partir d'une autre classe non liée. l'instruction using ne semble pas être le problème ici.

1

Peut-être que ce n'est pas l'interface publique qu'ils veulent que vous utilisiez. Peut-être qu'il y a une classe publique qui enveloppe cette classe.

+0

Peut-être. Je souhaite que les documents d'api d'Amazon soient plus clairs à ce sujet. – Chris

+0

? Qu'est-ce qui te fait penser que c'est une classe d'amis? Le mot clé ami n'existe pas en C#. –

+0

@Brian: Tout à fait raison. Je vous remercie. –