Avatar billede sinus-c Nybegynder
17. august 2004 - 10:43 Der er 1 løsning

System.Net.HttpWebRequest, (405) Method Not Allowed

Jeg forsøger at lave en webproxy som forwarder et request til en anden URL, og har i den forbindelse defineret følgende funktion:

public string ForwardRequest(System.Web.HttpRequest Request, string URI, System.Security.Cryptography.X509Certificates.X509Certificate Certificate)
        {
            this.mBaseWebRequest=(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URI);
            this.mBaseWebRequest.AllowAutoRedirect=true;

            if (Certificate!=null)
            {
                this.mBaseWebRequest.ClientCertificates.Add(Certificate);       
            }

            switch(Request.HttpMethod.ToUpper())
            {
                case "GET":
                {
                    goto default;
                }
                case "POST":
                {
                    this.mBaseWebRequest.Method="POST";
                    break;
                }
                case "HEAD":
                {
                    this.mBaseWebRequest.Method="HEAD";
                    break;
                }
                default:
                {
                    this.mBaseWebRequest.Method="GET";
                    break;
                }
            }

            foreach(string HeaderKey in Request.Headers.Keys)
            {
                this.SetHeaderValue(HeaderKey, Request.Headers[HeaderKey]);
            }           
           
            if (this.mBaseWebRequest.Method.ToUpper()=="POST")
            {
                System.IO.StreamWriter RequestStream=new System.IO.StreamWriter(this.mBaseWebRequest.GetRequestStream(), System.Text.Encoding.Default);
                RequestStream.AutoFlush=true;
               
                // UNDONE: If HttpMethod=Post, Parse Request.Form; Append Postback Data to RequestStream (HTTP HEADER\r\nName=HttpEnc(Value)...).

                System.Text.StringBuilder PostData=new System.Text.StringBuilder();
                foreach(string FormKey in Request.Form)
                {
                    if (PostData.Length>0)
                    {
                        PostData.Append("\r\n");
                    }
                    PostData.Append(FormKey+"="+Request.Form[FormKey]);
                }

                RequestStream.Write(PostData.ToString());
               
                RequestStream.Close();
            }           

            try
            {
                System.IO.StreamReader ResponseStream=new System.IO.StreamReader(this.mBaseWebRequest.GetResponse().GetResponseStream(), System.Text.Encoding.Default);
                return ResponseStream.ReadToEnd();
            }
            catch (System.Net.WebException Ex)
            {
                return Ex.Message;
            }
        }

Det virker fint med almindelige HTTP GET, men så snart jeg laver en HTTP POST går den ned med en Exception ((405) Method Not Allowed).

Nogen gode ideer til hvordan jeg kommer videre og får min HTTP POST til at fungere?

På forhånd tak!
Avatar billede sinus-c Nybegynder
17. august 2004 - 11:40 #1
Jeg har selv fundet en løsning på problemet. :)

Problemet bestod i at jeg forsøgte at poste til urlen: http://www.mydomain.dk/, og det understøttes ikke da den skal have den fulde sti til siden f.eks. http://www.mydomain.dk/default.aspx.

Sådan noget kan man lede længe efter, men det lykkedes mig dog at finde fejlen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester