HttpWebRequest non funziona con certi url

Con risposta HttpWebRequest non funziona con certi url

  • martedì 1 novembre 2011 21:52
     
     

    Ciao, ho appena scoperto che se il mio url termina con un punto, tipo

    http://www.miosito/sezioneCheTerminaConPunto.

    la web request fallisce restituendo un 404 Not Found e questo perché, per qualche motivo, elimina il punto alla fine!

    Io la costruisco passando la stringa al costruttore...c'è un'alternativa per dirgli di non correggere i link?


    • Modificato Squall867 martedì 1 novembre 2011 21:53
    •  

Tutte le risposte

  • martedì 1 novembre 2011 22:58
    Postatore
     
     

    ciao

    il punto è una parola chiave in genere negli URL

    è normale che generi questo comportamento visto che dal punto (compreso) in poi ci si aspetta l'estensione

     

    ma perchè hai un path simile?

    se è una pagina, dagli un nome completo, .aspx ad esempio

    o .svc se è un servizio wcf

     


    Antonio Esposito
    MCT, MCPD, MCTS, MCP
    http://dotnetlombardia.org

    Italy
  • mercoledì 2 novembre 2011 10:56
     
     

    Purtroppo gli url in questione non li scelgo io..cmq ho risolto trovando un workaround online, il fatto del punto pare sia cmq un bug conosciuto della classe Uri di .NET, speriamo lo risolvano in fretta:)

    Ho però un problema generico con la mia applicazione, mi sa che la sto approcciando male...potete aiutarmi nel post che ho appena aperto?

  • giovedì 3 novembre 2011 16:32
    Proprietario
     
     

    Ciao Squall867,

    Potresti cortesemente postare qualche informazione in più sulla soluzione trovata, magari servirà ad altri membri imbattuti in un caso simile?

     

    Grazie in anticipo per la tua collaborazione,


    Irina Turcu

    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e farli aumentare la conoscenza sui prodotti e le tecnologie Microsoft.

    LinkedIn

  • giovedì 3 novembre 2011 18:40
     
     Con risposta Contiene codice

    Ciao basta invocare questa funzione una volta sola nel ciclo di vita dell'applicazione (ad esempio nel costruttore).

    La funzione in sostanza modifica il funzionamento della classe Uri (utilizzata implicitamente da HttpWebRequest) affinché consideri i punti alla fine come parte integrante dell'Uri:

     

    private void fixURI()
            {
                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);
                        }
                    }
                }
            }
    


     


    • Contrassegnato come risposta Squall867 giovedì 3 novembre 2011 18:40
    • Modificato Squall867 giovedì 3 novembre 2011 18:41
    •  
  • venerdì 4 novembre 2011 07:56
    Proprietario
     
     

    Grazie, Squall867.

    Per qualsiasi altre difficoltà incontrate, non esitare a chiedere sul Forum.

     

    Ciao!


    Irina Turcu

    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e farli aumentare la conoscenza sui prodotti e le tecnologie Microsoft.

    LinkedIn