2

SLACK チャット クライアントの API と通信する C# コンソール アプリケーションがあります。問題なく SLACK にデータを投稿できます。今、私は逆のことをしたいと思います。

SLACK では、POST 先の URL を指定できます。URL を指定し、POST を受信するように C# プロジェクトを構成したいと考えています。ヘルプ!?

4

3 に答える 3

3

HttpListenerを使用できます。

Harold Hunt の記事に基づく簡単な例

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
    }
于 2016-01-21T20:19:18.070 に答える
1

GET は、サーバーからデータを取得するための HTTP メソッドです。異なるデータ ソースを指すには、異なる URI に対して要求を行う必要があります。たとえば、検索クエリを指定して会話からメッセージを取得する場合はhttps://slack.com/api/search.messages、必要なパラメーターを渡すために GET HTTP 要求を行う必要があります。

于 2016-01-21T20:05:48.353 に答える
1

C# で Web サービスを作成する方法はたくさんあります。WCF、WebAPI、ASMX、低レベルのソケット、およびあらゆる種類のオープン ソース フレームワークも同様です。

コンソール アプリには収まりませんが、私の意見では、これらの中で最も簡単なのは、ASP.NET Web アプリケーションである WebAPI です。

コンソール アプリを使用する必要がある場合は、Katana を検討します。

コンソール アプリでの Katana の例

于 2016-01-21T20:09:21.700 に答える