【问题标题】:An unexpected error occurred on a send on development but not in live发送开发时发生意外错误,但未实时发生
【发布时间】:2018-07-10 10:03:21
【问题描述】:

我有一个非常奇怪的错误,已经让我发疯了好几天。

我在我的 Visual Studio 开发环境中运行以下代码并收到错误“发送时发生意外错误”。编译代码并将其移动到没有Visual Studio的机器上,它工作正常

环境是 .Net 4.7.1,使用 Visual Studio 2015

public string Get(string resource)
{
   string url = BuildResourceUrl(resource);
   try
   {
            WebRequest req = WebRequest.Create(url);
            req.Method = "GET";

            req.ContentType = "application/json";
            req.Headers.Add("X-Shopify-Access-Token", _apiPassword);

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            WebResponse response = req.GetResponse();

            Stream dataStream = response.GetResponseStream();

            StreamReader reader = new StreamReader(dataStream);

            string responseFromServer = reader.ReadToEnd();

            reader.Close();
            dataStream.Close();
            response.Close();

            return responseFromServer;
   }
   catch (WebException ex)
   {
            string response;

            using (var reader = new StreamReader(ex.Response.GetResponseStream()))
            {
                response = reader.ReadToEnd();
            }
            throw ex;
   }

}

我已禁用所有防火墙和防病毒软件,但这没有任何区别。

帮助解决这个问题将是最appriciated

【问题讨论】:

  • 你是从哪里得到这个消息的?在 exresponse 中的 catch 块中
  • 尝试在此答案中指定 TLS 选项:stackoverflow.com/a/43992910/246342
  • 调试这些问题的最佳方法是使用像wireshark或fiddler这样的嗅探器。比较好的结果和坏结果中的标题。在这种情况下,PC 中安装的浏览器很可能是不同的。您可能需要为内容类型添加标题。您可能还必须在网络浏览器中手动删除 cookie。开发系统中可能存在阻止代码运行的错误 cookie。
  • 我在 ex 上收到此错误,我尝试将 SecurityProtocal 更改为 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 |安全协议类型.Tls11 |安全协议类型.Tls;但这也不起作用

标签: c# webrequest


【解决方案1】:

经过多次挖掘和挫折,我找到了解决方案。即使使用 .Net 4.7.1 我仍然必须使用以下代码

public string Get(string resource)
    {
        string url = BuildResourceUrl(resource);
        try
        {
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            WebRequest req = WebRequest.Create(url);
            req.Method = "GET";

            req.ContentType = "application/json";
            req.Headers.Add("X-Shopify-Access-Token", _apiPassword);

            WebResponse response = req.GetResponse();

            Stream dataStream = response.GetResponseStream();

            StreamReader reader = new StreamReader(dataStream);

            string responseFromServer = reader.ReadToEnd();

            reader.Close();
            dataStream.Close();
            response.Close();

            return responseFromServer;
        }
        catch (WebException ex)
        {
            string response;

            using (var reader = new StreamReader(ex.Response.GetResponseStream()))
            {
                response = reader.ReadToEnd();
            }
            throw ex;
        }
    }

这似乎是 Shopify 特有的问题,因为我在向其他提供商调用 API 时没有任何问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2020-12-02
    • 2015-11-22
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多