cuando hago un GET con WebRequest.Create ("http://abc/test.") Obtengo 404 porque según el violinista el punto final es eliminado por .NET y el servidor web necesita el punto. ¿Cómo puedo prevenir eso o evitarlo? cualquier solución es apreciada!HttpWebRequest a URL con punto al final
Respuesta
Este es un problema conocido que ha aparecido en los foros de Microsoft varias veces.
La clase Uri
piensa incorrectamente que todos los URI actúan como archivos de disco de Windows donde un punto final (sin extensión de archivo) no es relevante.
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/5206beca-071f-485d-a2bd-657d635239c9/
Solución en la ficha solución en el informe oficial de errores:
.. parece ser válida. Básicamente, ejecute este código para restablecer una bandera estática en .NET antes de trabajar 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);
}
}
}
Demostrado:
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();
}
}
}
Truco inteligente. Funciona muy bien – harriyott
¡Muchas gracias! ;-) –
no funcionó para mí. Estoy haciendo una aplicación de formularios de Windows. –
cambia el punto en cadena a Hex
string.format("{0:x2}",yoururl);
creo que es útil para ti, porque lo usé en Twitter API Formato Oauth
Reescribí algunos de los t a una función que no requieren que usted agregue cualquier espacio de nombres
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. ¿Necesitamos punto y coma al final?
- 2. URL dinámicas: ¿con o sin una barra al final?
- 3. API de UPS PHP - URL de punto final
- 4. url raya al final y seo
- 5. exponiendo punto final net.tcp
- 6. API de punto final Semántica
- 7. "No había punto final a escuchar ..."
- 8. ¿Cómo conseguir que ASP.NET MVC coincida con el carácter de punto (".") Al final de una ruta?
- 9. Perl punto y coma al final de la instrucción
- 10. punto final no encontró al alojar en ASP.NET
- 11. Ember.js Enrutamiento: coincidencia al final de la url
- 12. Punto final Sesame SPARQL de solo lectura
- 13. ¿Qué es un punto final?
- 14. Configurar el punto final HTTP con SOAP en Mule Flows
- 15. ¿Por qué necesitaría una barra al final de una URL?
- 16. Cómo agregar WCF IncludeExceptionDetailInFaults a comportamientos de punto final?
- 17. ¿Debo poner .htm al final de mis URL?
- 18. ¿Necesito un punto y coma final aquí?
- 19. Delphi XE2 HTTPRIO No se puede recuperar la URL de punto final de servicio/Puerto de
- 20. Publicar el punto final JAX-WS con Jetty 7 incrustado
- 21. WCF 4 Jabón y JSON punto final Asegurado con DotNetOpenAuth
- 22. Calcular punto final dado distancia, rodamiento, punto de partida
- 23. Protección del punto final del servicio WCF con autenticación personalizada
- 24. Override Glassfish generado Servicio WSDL Dirección del punto final
- 25. Punto final único con contratos de servicio múltiple
- 26. ¿Qué es un "punto final" en WCF?
- 27. ¿Acaso mis URL con barra al final (/) o no? Y cómo lo hago al hacer esto con codeigniter
- 28. servicio web reparador punto final no encontró
- 29. Analizando texto con datos opcionales al final
- 30. ¿Puedo volver a utilizar una HttpWebRequest?
http://msdn.microsoft.com/en-us/library/hh367887(v=VS.110).aspx confirma esto se fijó en. NET4.5. – EricLaw