quando eseguo un GET con WebRequest.Create ("http://abc/test.") Ottengo 404 perché secondo il violinista il punto finale viene rimosso da .NET e il server Web ha bisogno del punto. come posso prevenirlo o aggirarlo. qualsiasi soluzione è apprezzata!HttpWebRequest a URL con punto alla fine
risposta
Questo è un problema noto che è comparso nei forum Microsoft alcune volte.
La classe Uri
pensa erroneamente che tutti gli URI agiscano come i file del disco di Windows in cui un punto finale (senza estensione di file) non è rilevante.
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/5206beca-071f-485d-a2bd-657d635239c9/
Soluzione in scheda soluzione alternativa al rapporto ufficiale bug:
.. sembra essere valido. Fondamentalmente, eseguire questo codice per reimpostare una bandiera statica in .NET prima di lavorare con 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);
}
}
}
dimostrato:
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();
}
}
}
Trucco intelligente. Funziona molto bene. – harriyott
Grazie mille! ;-) –
non ha funzionato per me. Sto facendo un'applicazione Windows Form. –
si cambia il punto in stringa esadecimale
string.format("{0:x2}",yoururl);
penso che sia utile per te, perché l'ho usato in Twitter API Oauth formattazione
Ha riscritto alcuni di i t a una funzione che dont richiedono di aggiungere eventuali spazi dei nomi
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. rimuovere punto alla fine del testo
- 2. Backbone.js: slash alla fine del percorso URL
- 3. Che cosa significa il punto interrogativo alla fine di un css include url do?
- 4. Punto e virgola Perl alla fine del prospetto
- 5. Devo inserire .htm alla fine del mio URL?
- 6. RegEx corrisponde a un numero alla fine di una stringa
- 7. percorso di Windows con un '$' alla fine
- 8. Aggiungere alla fine della linea con sed
- 9. Regex per abbinare alla fine della riga con carattere jolly
- 10. Come si esegue un'attività "fine alla fine" ma solo alla fine dell'attività corrente?
- 11. Come ottenere ASP.NET MVC per abbinare il carattere punto (".") Alla fine di una rotta?
- 12. Come posso eseguire l'autenticazione digest con HttpWebRequest?
- 13. Come posso mappare Ctrl + punto e virgola per aggiungere un punto e virgola alla fine della riga?
- 14. Un URL può contenere un punto e virgola?
- 15. __del__ alla fine del programma
- 16. Httpwebrequest e Fiddler
- 17. Modificare un URL relativo alla URL assoluto
- 18. android append '...' alla fine textview
- 19. Il punto alla fine di un galleggiante suggerisce una mancanza di precisione?
- 20. Come passare credenziali a httpwebrequest per accedere alla libreria di SharePoint
- 21. HttpWebRequest con https in C#
- 22. Webclient/HttpWebRequest con autenticazione di base restituisce 404 non trovato per URL valido
- 23. C# - HttpWebRequest POST (Login a Facebook)
- 24. C'è un modo per fermare il punto di riempimento alla fine di una frase?
- 25. Regex estrarre la stringa dopo il secondo "." carattere punto alla fine di una stringa
- 26. Convenzione di denominazione: perché l'array # delete non ha un punto esclamativo alla fine?
- 27. Come posso ottenere il buffer di compilazione posizionare il punto alla sua fine?
- 28. Spring MVC return HTTP 406 su URL con punto
- 29. La modifica di NSTextStorage fa spostare il punto di inserimento alla fine della riga
- 30. Come aggiungere giorno a DateTime alla fine del mese?
http://msdn.microsoft.com/en-us/library/hh367887(v=VS.110).aspx conferma questo è stato fissato in. NET4.5. – EricLaw