C# 如何从帖子接收数据

标签 c# url post receiver slack

我有一个 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/

相关文章:

c# - 字符串替换 C# 中的变音符号

c# - C# 中匿名未附加 block 的值是什么?

html - 如何检索图像 url 的标题

Javascript:更改哈希的特定部分

java - Android,通过 HTTP 将 XML 字符串发送到服务器

c# - 从特定索引中删除字符串中的字符

c# - ApiController 中的异步初始化

javascript - HTML/javascript 中多个 URL 之间的切换

java - POST 请求无法使用 ReSTLet 处理 JSON 输入

javascript - 使用新的 aaData 值重新加载数据表