尝试将消息从C#发布到Slack时出现SSL / TSL问题

问题描述

我正在尝试通过ASP.NET MVC C#中的Slack使用Web挂钩发布消息。尝试执行时出现 SSL / TLS问题。我的代码看起来不错,并且将其与那里的几个教程进行了比较,没有发现任何差异。这是我的SlackClient.cs:

public class SlackClient
{
    private readonly Uri _uri;
    private readonly Encoding _encoding = new UTF8Encoding();

    public SlackClient(string urlWithAccesstoken)
    {
        _uri = new Uri(urlWithAccesstoken);
    }

    //Post a message using simple strings  
    public void PostMessage(string text,string username = null,string channel = null)
    {
        Payload payload = new Payload()
        {
            Channel = channel,Username = username,Text = text
        };

        PostMessage(payload);
    }

    
    public HttpResponseMessage PostMessage(Payload payload)
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
        string payloadJson = JsonConvert.SerializeObject(payload);
        var content = new StringContent(payloadJson,Encoding.UTF8,"application/json");
        using (HttpClient client = new HttpClient())
        { var result = client.PostAsync(_uri,content).Result; return result; }
    }
}

//This class serializes into the Json payload required by Slack Incoming WebHooks  
   public class Payload
   {
    [JsonProperty("channel")]
    public string Channel { get; set; }

    [JsonProperty("username")]
    public string Username { get; set; }

    [JsonProperty("text")]
    public string Text { get; set; }
    }
 

这是我实际调用PostMessage的地方(出于安全考虑,我已将其隐藏在实际的Webhook地址/令牌中)

   public void SlackMessagetest()
    {

        string WebHookUrl = "https://myslackwebsite.slack.com/services/MYWEBHOOKURLFROMSLACK";             
        SlackClient client = new SlackClient(WebHookUrl);
        client.PostMessage(username: "tester",text: "Testing Slack Integration!",channel: "#random");
        
    }

我得到的错误如下:

请求已中止:无法创建SSL / TLS安全通道。

所以看来我的PostMessage方法和URI返回有问题。根据我的研究,它应该可以正常工作!我的Web挂钩已通过验证,并已在Slack中正确设置。

非常感谢任何帮助!

解决方法

松弛requires TLS 1.2 and above

也就是说,将SecurityProtocolType.Tls(TLS 1.2)替换为SecurityProtocolType.Tls12(TLS 1)

REF:SecurityProtocolType Enum

高度。