quand je fais un get avec WebRequest.Create ("http://abc/test.") Je reçois 404 parce que selon fiddler le point de queue est dépouillé par .NET et le serveur web a besoin du point. comment puis-je l'empêcher ou contourner ce problème? toute solution de contournement est appréciée!HttpWebRequest à l'URL avec le point à la fin
Répondre
Il s'agit d'un problème connu qui est apparu sur les forums Microsoft plusieurs fois. La classe Uri
pense incorrectement que tous les URI agissent comme des fichiers de disque Windows où un point de fin (pour aucune extension de fichier) n'est pas pertinent.
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/5206beca-071f-485d-a2bd-657d635239c9/
Solution dans l'onglet solution de contournement au rapport officiel de bogue:
.. semble être valide. Fondamentalement, exécutez ce code pour réinitialiser un indicateur statique dans .NET avant de travailler avec System.Uri:
MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (getSyntax != null && flagsField != null)
{
foreach (string scheme in new[] { "http", "https" })
{
UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme });
if (parser != null)
{
int flagsValue = (int)flagsField.GetValue(parser);
// Clear the CanonicalizeAsFilePath attribute
if ((flagsValue & 0x1000000) != 0)
flagsField.SetValue(parser, flagsValue & ~0x1000000);
}
}
}
démontré:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var surl = "http://x/y./z";
var url = new Uri(surl);
Console.WriteLine("Broken: " + url.ToString());
MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (getSyntax != null && flagsField != null)
{
foreach (string scheme in new[] { "http", "https" })
{
UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme });
if (parser != null)
{
int flagsValue = (int)flagsField.GetValue(parser);
// Clear the CanonicalizeAsFilePath attribute
if ((flagsValue & 0x1000000) != 0)
flagsField.SetValue(parser, flagsValue & ~0x1000000);
}
}
}
url = new Uri(surl);
Console.WriteLine("Fixed: " + url.ToString());
Console.WriteLine("Press ENTER to exit ...");
Console.ReadLine();
}
}
}
Astuce astucieux. Fonctionne très bien. – harriyott
Merci beaucoup! ;-) –
n'a pas fonctionné pour moi. Je fais une application de formulaires Windows. –
vous modifiez le point dans une chaîne Hex
string.format("{0:x2}",yoururl);
je pense que c'est utile pour vous, parce que je l'ai utilisé dans le format de l'API Oauth twitter
Réécrit certains d'i t à une fonction qui ne pas vous obliger à ajouter des espaces de noms
private Uri MyUri(string url)
{
Uri uri = new Uri(url);
System.Reflection.MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
System.Reflection.FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (getSyntax != null && flagsField != null)
{
foreach (string scheme in new[] { "http", "https" })
{
UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme });
if (parser != null)
{
int flagsValue = (int)flagsField.GetValue(parser);
// Clear the CanonicalizeAsFilePath attribute
if ((flagsValue & 0x1000000) != 0)
flagsField.SetValue(parser, flagsValue & ~0x1000000);
}
}
}
uri = new Uri(url);
return uri;
}
- 1. Comment puis-je supprimer l'initiale du milieu avec un point à la fin?
- 2. Question mark à la fin de RewriteRule
- 3. Point-virgule à la fin de if-instructions et fonctions dans C
- 4. Tri du point courant à la fin du fichier dans gvim?
- 5. Comment justifier le texte et ajouter ... à la fin
- 6. ASP.NET MVC: Comment Route Terme avec. (Période) à la fin
- 7. Appel d'un POST à un site externe avec C# (httpwebrequest)
- 8. nhibernate - sort null à la fin
- 9. Restaurer à un point dans le temps
- 10. Erreur LoaderLock à la fin du programme
- 11. Insertion à la toute fin dans FCKeditor
- 12. Connexion à eBay en utilisant HttpWebRequest
- 13. Expressions régulières _ # à la fin de la chaîne
- 14. Besoin d'aide avec l'objet HttpWebRequest
- 15. numéros, à l'exclusion des zéros de fin
- 16. exécuter la fonction à la fin d'un autre, utilisez ajaxComplete()?
- 17. La barre d'outils remonte à la fin de l'appel
- 18. Rake (Ruby) erreur d'arrêt à la fin de la construction
- 19. le point sur la façon d'obtenir celltext avec linebreaks d'un tableur à un XML
- 20. Lecture d'un son bref à la fin de la minuterie?
- 21. droit à bords gauche à point (Graphviz)
- 22. Numéro de correspondance à la fin de la chaîne
- 23. Utiliser HTTPWebRequest pour obtenir le titre de la page à distance
- 24. Demander un 2ème URL avec le même HttpWebRequest obj
- 25. 1 point de fin de plusieurs contrats de service - wcf?
- 26. Comment mesurer le temps écoulé de HttpWebResponse réel par rapport à la transmission de HttpWebRequest?
- 27. Ajouter dijit généré dynamiquement à la fin d'un div
- 28. expression rationnelle ne correspond pas à la fin
- 29. Comment générer un index à la fin d'un fichier PDF?
- 30. je préfixe le css à la fin de la tête tag
http://msdn.microsoft.com/en-us/library/hh367887(v=VS.110).aspx confirme cela a été fixé. NET4.5. – EricLaw