Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何从post接收数据_C#_Url_Post_Receiver_Slack - Fatal编程技术网

C#如何从post接收数据

C#如何从post接收数据,c#,url,post,receiver,slack,C#,Url,Post,Receiver,Slack,我有一个C#控制台应用程序,它与SLACK chat客户端的API进行通信。我能够毫无问题地将数据发布到SLACK。现在我想做相反的事情 在SLACK中,我可以指定要发布到的URL。我想指定一个URL,并将我的C#项目配置为接收帖子。救命 GET是从服务器获取数据的HTTP方法。要指向不同的数据源,您必须向不同的URI发出请求,例如,如果您希望从给定搜索查询的对话中获取一些消息,您必须向https://slack.com/api/search.messages传递所需的参数。在C#中创建web服

我有一个C#控制台应用程序,它与SLACK chat客户端的API进行通信。我能够毫无问题地将数据发布到SLACK。现在我想做相反的事情


在SLACK中,我可以指定要发布到的URL。我想指定一个URL,并将我的C#项目配置为接收帖子。救命

GET是从服务器获取数据的HTTP方法。要指向不同的数据源,您必须向不同的URI发出请求,例如,如果您希望从给定搜索查询的对话中获取一些消息,您必须向
https://slack.com/api/search.messages
传递所需的参数。

在C#中创建web服务有很多方法。WCF、WebAPI、ASMX、低级套接字以及各种开源框架

它不适合控制台应用程序,但在我看来,最简单的是WebAPI,它是一个ASP.NET web应用程序

如果你必须使用控制台应用程序,我会看看Katana

您可以使用

基于


谢谢,但是SLACK的api专门向您指定的URL发送帖子。非常感谢您的回复!你是说当我创建一个新的SimpleServer时,我可以为应用程序定义任何要侦听的URL吗?是的,你可以,但是当你想从远程服务器获得它时,你可能需要公共IP地址。此外,端口必须是免费的。
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();
    }
}
    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
    }