Retrieve HTTP POST request containing XML
You could write an ASP.NET application that you will host in IIS in which you could either have an .ASPX page or a generic .ASHX handler (depending on how you want the result to be formatted - do you want to return HTML or some other type) and then read the Request.InputStream
which will contain the body of the request that comes from the client.
Here's an example of how you could write a generic handler (MyHandler.ashx
):
public class MyHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var stream = context.Request.InputStream;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
string xml = Encoding.UTF8.GetString(buffer);
... do something with the XML
// We only set the HTTP status code to 202 indicating to the
// client that the request has been accepted for processing
// but we leave an empty response body
context.Response.StatusCode = 202;
}
public bool IsReusable
{
get
{
return false;
}
}
}
nubme
Updated on June 04, 2022Comments
-
nubme almost 2 years
I need to setup a web page that listens for XML document via an HTTP POST. I don't need to POST out, I need to receive that POST. What object does this? Should I use an HTTP handler, web service, webRequest, Stream or something else? I need to use a IIS Server and prefer C#.
I've Tried...
I dont think I can use WebRequest since I'm not sending a request, just waiting for them.
"HttpRequest.InputStream" but I'm not sure how to use it or where to put it. Do i need to use it with a web service or a asp.net application? I put it in http://forums.asp.net/t/1371873.aspx/1
I've tried a simple web service http://msdn.microsoft.com/en-us/library/bb412178.aspx - But when i try to visit "http://localhost:8000/EchoWithGet?s=Hello, world!", i get a "webpage cannot be found error"
If anyone has any helpful code or links that would be great!
EDIT: I am trying to receive notifications from another program.
-
L.B about 12 years
-
nubme about 12 yearsThanks, but I was trying to stay away from the network layer.
-
L.B about 12 years@numbe, It is not TcpListener, it's HttpListener so nothing to do with NW layer, but of course, your code your choise.
-
nubme about 12 yearsoh okay, thanks ill try it out. the handler method isn't working for me
-
Sandy about 11 years@nubme, did you sort out this problem?
-
nubme about 12 yearsI dont need to return anything, I'm just receiving notifications from another program. I tried Request.InputStream, and put a breakpoints in the code. It doesn't seem to catch any notifications. My code is very similar to the link above for try #2. I put it in Page_load. Does a POST Request trigger Page_load each time?
-
Darin Dimitrov about 12 yearsHTTP is a request/response based protocol. So you must always return something. You could return a 200 status code with an empty body indicating to the client the success of the operation.
-
nubme about 12 yearsI see, I'll try out the code and let you know. Thanks for the help! =]
-
nubme about 12 yearsSo i got your code to work i think... I'm using wfetch to sent GET & POST requests. The code is able to see the GET request, but nothing happens when i send POST. Any idea? Thanks!
-
nubme about 12 yearsnm you gotta ping the exact page, can't just do localhost