开发者

how to handle POST method with OpenRasta?

I have a simple OpenRasta webservice and a console client for the webservice.

Using GET method is quite easy - I defined GET in OpenRasta and when client uses this code it all works fine

 HttpWebRequest request = WebRequest.Create("http://localhost:56789/one/two/three") as HttpWebRequest;  

 // Get response  
 using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)  
 {  
     // Get the response stream  
     StreamReader reader = new StreamReader(response.GetResponseStream());  

     // Console application output  
     Console.WriteLine(reader.ReadToEnd());  

However when I try to use POST like this

  Uri address = new Uri("http://localhost:56789/");

  HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
  request.Method = "POST";
  request.ContentType = "application/x-www-form-urlencoded";

  string one = "one";
  string two = "two";
  string three = "three";

  StringBuilder data = new StringBuilder();
  data.Append(HttpUtility.UrlEncode(one));
  data.Append("/" + HttpUtility.UrlEncode(two));
  data.Append("/" + HttpUtility.UrlEncode(three));

  byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
  request.ContentLength = byteData.Length;

  // Write data  
  using (Stream postStream = request.GetRequestStream())
  {
    postStream.Write(byteData, 0, byteData.Length);
  }

  // Get response  
  using (HttpWebResponse response = request.GetResp开发者_如何学JAVAonse() as HttpWebResponse)
  {
    StreamReader reader = new StreamReader(response.GetResponseStream());
    Console.WriteLine(reader.ReadToEnd());
  }
  Console.ReadKey();
}

I get 500 Internal Server Error and I have no idea how to handle this in OpenRasta webservice. How do I defined POST method in Openrasta? Any suggestions?


The code you provide sends "one/two/three" and put it in the content of your request with a media type of "application/x-www-form-urlencoded", that's probably where your problem comes from, as what you've encoded has nothing to do with the media type you've specified.

Without knowing what your handler looks like, I can't tell you what you should put in it. I can however tell you that if you're sending parameters, it should look like key=value&key2=value2 for that media type, and has nothing to do with what would go in the URI (your /one/two/three example).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜