【发布时间】:2014-11-17 15:17:57
【问题描述】:
场景是这样的,我有一个基本的 HTTPHandler,从一个源接收 JSON,处理得很好。然后它需要发送到另一个目的地(与原件无关),但对于我的生活,无法让它发布。 使用wireshark它似乎永远不会发布数据,我想知道是不是因为它使用相同的HTTPContext所以我部署为一个新线程 - 仍然不起作用..我已经发布了代码(对不起,如果有点乱,我只是在尝试在整理之前让它工作)。 感谢您的期待,我以前使用过这里的许多文章,它们一直非常有用!
public void ProcessRequest ( HttpContext context )
{
string retval = string.Empty;
string jsonString = string.Empty;
try
{
context.Response.ContentType = "text/plain; charset=utf-8";
context.Request.InputStream.Position = 0;
using ( var inputStream = new StreamReader( context.Request.InputStream ) )
jsonString = inputStream.ReadToEnd();
//debug only
var jsonObject = JsonConvert.DeserializeObject<GitlabPost>( jsonString );
retval =
string.Format(
"JSON Received {0}",
DateTime.Now.ToUniversalTime() );
context.Response.Write( retval ); //respond to gitlab, tell it received ok.
//now have json object, spit it out to axosoft.
var hashedJSON = string.Format("{0}{1}", jsonString, AXOSOFT_API_KEY);
SHA256 hash = SHA256Managed.Create();
Byte[] result = hash.ComputeHash( System.Text.Encoding.ASCII.GetBytes( hashedJSON ) );
hashedJSON = result.Aggregate( "", ( current, x ) => current + string.Format( "{0:x2}", x ) );
Thread jsonPostThread = new Thread(() => SendAxosoftJSON(jsonString, hashedJSON) ) ;
jsonPostThread.Start();
}
catch (Exception error)
{
string err = error.Message;
context.Response.ContentType = "text/plain; charset=utf-8"; //"application/xml";
retval =
string.Format(
"JSON Post Failed at {0} because {1}",
DateTime.Now.ToUniversalTime(), err );
context.Response.Write( retval );
}
}
发帖的主线是这样的:
private void SendAxosoftJSON(string jsonString, string hashedJSON)
{
var req =
(HttpWebRequest)
WebRequest.Create( AXOSOFT_URL + hashedJSON );
req.ContentType = "application/json";
req.Method = "POST";
using (var sw = new StreamWriter( req.GetRequestStream() ))
{
sw.Write( jsonString );
sw.Flush();
sw.Close();
}
req.GetResponse();
}
【问题讨论】:
标签: c# http post httphandler