2010-03-05 2 views
0

J'essaie d'envoyer des données au site Web DotNetOpenAuth comme décrit ici http://msdn.microsoft.com/en-us/library/debx8sh9.aspx Expéditeur de réception (500) Erreur interne du serveur. Le même code pour site vierge sans DotNetOpenAuth fonctionne très bien. Devrais-je modifier quelque chose?Envoyer des données en utilisant la classe WebRequest à site Web DotNetOpenAuth

Voici une exception:

System.ArgumentNullException was unhandled by user code 
    Message="Value cannot be null.\r\nParameter name: key" 
    Source="mscorlib" 
    ParamName="key" 
    StackTrace: 
     at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument) 
     at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) 
     at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value) 
     at DotNetOpenAuth.OAuth.ChannelElements.OAuthChannel.ReadFromRequestCore(HttpRequestInfo request) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OAuth\ChannelElements\OAuthChannel.cs:line 145 
     at DotNetOpenAuth.Messaging.Channel.ReadFromRequest(HttpRequestInfo httpRequest) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\Messaging\Channel.cs:line 372 
     at DotNetOpenAuth.OAuth.ServiceProvider.ReadRequest(HttpRequestInfo request) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OAuth\ServiceProvider.cs:line 222 

Exception se produit sur la dernière ligne du code:

private void context_AuthenticateRequest(object sender, EventArgs e) 
    { 
     // Don't read OAuth messages directed at the OAuth controller or else we'll fail nonce checks. 
     if (this.IsOAuthControllerRequest()) 
     { 
      return; 
     } 

     if (HttpContext.Current.Request.HttpMethod != "HEAD") 
     { // workaround: avoid involving OAuth for HEAD requests. 
      IDirectedProtocolMessage incomingMessage = OAuthServiceProvider.ServiceProvider.ReadRequest(new HttpRequestInfo(this.application.Context.Request)); 

Répondre

1

Si vous envoyez la requête POST avec un Content-Type de application/x-www-form-urlencoded, mais l'entité POST contient autre chose que le format normal key1=value1&key2=value2, qui pourrait l'expliquer. Il semble que DotNetOpenAuth ne peut pas gérer une entité POST qui prétend être des paires nom = valeur mais qui n'a qu'une valeur sans clé devant elle. On peut dire que c'est un bug dans DotNetOpenAuth puisque normalement c'est juste une valeur de clé nulle.

Si vous n'envoyez pas de paire clé = valeur, je vous suggère de laisser tomber ou de modifier l'en-tête Content-Type afin de ne pas prétendre envoyer des paires clé = valeur. Si vous les envoyez, mais que vous envoyez intentionnellement une clé nulle, attendez the bug gets fixed.

Questions connexes