J'écris une application de test WPF par rapport à un service REST WCF exécuté sur un environnement de développement local Azure avec un fournisseur d'authentification de base personnalisé. Lorsque le client de test passe un appel à l'aide de WebClient ou de HttpWebRequest, il passe l'en-tête d'autorisation et le fournisseur personnalisé l'authentifie. Le service reçoit ensuite à nouveau la même demande mais sans l'en-tête d'authentification. Tout cela se passe dans un seul appel à request.GetResponse ou webClient.DownloadString.Pourquoi les classes de requêtes Web .NET réexécutent-elles les demandes sans en-tête d'authentification?
S'il vous plaît aider, je deviens fou.
Code client:
using (var client = new WebClient())
{
client.Headers.Add(HttpRequestHeader.Authorization, "Basic " +
Convert.ToBase64String(Encoding.ASCII.GetBytes(UserName + ":" + Password)));
try
{
ResponseText = client.DownloadString(BaseAddress + "/" + MethodCall);
}
catch (WebException ex)
{
ResponseText = ex.Message + Environment.NewLine + Environment.NewLine + ex;
}
}
(Cette version met l'en-tête d'autorisation directement parce que la mise en vérification des pouvoirs WebClient ne semble pas fonctionner du tout.)
EDIT: Fiddler montre que la première appel reçoit une redirection 307, probablement à cause du tissu de développement Azure. Les classes Web .NET sont-elles trop stupides pour renvoyer l'en-tête Authorization sur une redirection?
Etes-vous sûr qu'il affiche la version non authentifiée * avant * celle qui est authentifiée? Je m'attendrais à authentifié/401/authentifié. –
Je le ferais moi-même, mais j'ai des points d'arrêt dans le fournisseur d'authentification et il est certain qu'il obtient la demande avec l'authentification en premier. –