我有一个 C# 控制台应用程序,可与 SLACK 聊天客户端的 API 进行通信。我可以毫无问题地将数据发布到 SLACK。现在我想做相反的事情。
在 SLACK 中,我可以指定要发布到的 URL。我想指定一个 URL,并配置我的 C# 项目以接收 POST。帮忙!?
最佳答案
您可以使用HttpListener .
基于 this article 的简单示例作者:哈罗德·亨特:
public delegate byte[] ProcessDataDelegate(string data);
public class SimpleServer
{
private const int HandlerThread = 2;
private readonly ProcessDataDelegate handler;
private readonly HttpListener listener;
public SimpleServer(HttpListener listener, string url, ProcessDataDelegate handler)
{
this.listener = listener;
this.handler = handler;
listener.Prefixes.Add(url);
}
public void Start()
{
if (listener.IsListening)
return;
listener.Start();
for (int i = 0; i < HandlerThread; i++)
{
listener.GetContextAsync().ContinueWith(ProcessRequestHandler);
}
}
public void Stop()
{
if(listener.IsListening)
listener.Stop();
}
private void ProcessRequestHandler(Task<HttpListenerContext> result)
{
var context = result.Result;
if (!listener.IsListening)
return;
// Start new listener which replace this
listener.GetContextAsync().ContinueWith(ProcessRequestHandler);
// Read request
string request = new StreamReader(context.Request.InputStream).ReadToEnd();
// Prepare response
var responseBytes = handler.Invoke(request);
context.Response.ContentLength64 = responseBytes.Length;
var output = context.Response.OutputStream;
output.WriteAsync(responseBytes, 0, responseBytes.Length);
output.Close();
}
}
在他们之后,您可以从控制台应用程序简单地使用 http 服务器:
static void Main(string[] args)
{
StartServer();
Console.ReadKey();
}
public static void StartServer()
{
var httpListener = new HttpListener();
var simpleServer = new SimpleServer(httpListener, "http://127.0.0.1:1234/test/", ProcessYourResponse);
simpleServer.Start();
}
public static byte[] ProcessYourResponse(string test)
{
Console.WriteLine(test);
return new byte[0]; // TODO when you want return some response
}
关于C# 如何从帖子接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34932834/