使用 RestSharp 方法时 Visual Studio 中断
When using RestSharp Method Visual Studio breaks
我遇到了一个非常奇怪的问题,今天早些时候我有大量的代码在工作,运行 在 Visual Studio 中,我的表单完美无缺。我去吃午饭回来,试图打开它,但什么也没有。它运行,有 0 个错误,它使用内存但不会显示表单。据我所知,我没有改变任何东西。
我创建了一个新的 Windows 表单应用程序并逐行重写了代码,我找到了它的问题,但是我终其一生都无法弄清楚它为什么会破坏它。
Form1.cs坏了
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using RestSharp;
using Newtonsoft;
using Newtonsoft.Json;
namespace RestApiViewerWUG
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var client = new RestClient("http://notrelevent.whocares.com/api/v1/token");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic cmVzdDo5RGJSIypkQDQ=");
request.AddHeader("Content-Type", "text/plain");
request.AddParameter("text/plain", "userName=rest&password=xxxxxx&grant_type=password", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); //THIS LINE BREAKS IT
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}
问题
只需删除行 "IRestResponse response = client.Execute(request);" 即可修复它并允许显示表单。
我尝试了什么?
- 我已确保 RestSharp 已正确安装和引用,我已经
甚至尝试了几个版本。
- 我已经卸载重装Visual Studio2015
- 如前所述,我已经逐行创建了一个全新的项目
- Breakpoints/writing 到 console/log 什么都不做,0 当该行留在代码中时,任何事情都会发生
其他信息
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RestApiViewerWUG
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
表格:
字面意思就是 textBox 与 textBox1 的确切名称
简而言之,您不应该在 构造函数 中执行此类操作,而是在加载表单后执行。
然后,如果您有 超时,则您不会等待表单加载并且可以反馈它正在进行的事实,或者如果有exception
你没有撕掉 表格。
您还会捕获任何 异常 ,并给出可能发生的故障模式的一些通知。
背景
表单构造函数 在加载(呈现)表单之前运行,因此最好不要在其中做任何昂贵的事情,事实上这对任何构造函数都是如此。构造函数用于初始化 class/struct 需要运行的最小状态。
关于表单构造函数,如果在构造过程中有一个很长的运行过程,直接影响表单加载,不会显示让用户(和您)挠头想知道为什么表单没有显示。更糟糕的是,如果存在 未处理的异常 您的表单永远不会加载
对此我深表歉意,感谢我学到的新知识。
我的问题的答案太简单了...一个月前我向我们的 api 添加了一个证书,但它似乎从未适用,其他人抱怨我们的产品存在类似问题正在服务器上使用。我什么都没想。
昨天他们让服务器离线几分钟以更换 PSU,一旦重新启动...我的证书已加载,所以现在它正在使用 https。
它不会 "load" 的原因实际上是因为服务器的超时时间需要大约 60 秒,所以在等待足够长的时间后填充。
我遇到了一个非常奇怪的问题,今天早些时候我有大量的代码在工作,运行 在 Visual Studio 中,我的表单完美无缺。我去吃午饭回来,试图打开它,但什么也没有。它运行,有 0 个错误,它使用内存但不会显示表单。据我所知,我没有改变任何东西。
我创建了一个新的 Windows 表单应用程序并逐行重写了代码,我找到了它的问题,但是我终其一生都无法弄清楚它为什么会破坏它。
Form1.cs坏了
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using RestSharp;
using Newtonsoft;
using Newtonsoft.Json;
namespace RestApiViewerWUG
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var client = new RestClient("http://notrelevent.whocares.com/api/v1/token");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic cmVzdDo5RGJSIypkQDQ=");
request.AddHeader("Content-Type", "text/plain");
request.AddParameter("text/plain", "userName=rest&password=xxxxxx&grant_type=password", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); //THIS LINE BREAKS IT
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}
问题
只需删除行 "IRestResponse response = client.Execute(request);" 即可修复它并允许显示表单。
我尝试了什么?
- 我已确保 RestSharp 已正确安装和引用,我已经 甚至尝试了几个版本。
- 我已经卸载重装Visual Studio2015
- 如前所述,我已经逐行创建了一个全新的项目
- Breakpoints/writing 到 console/log 什么都不做,0 当该行留在代码中时,任何事情都会发生
其他信息
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RestApiViewerWUG
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
表格:
字面意思就是 textBox 与 textBox1 的确切名称
简而言之,您不应该在 构造函数 中执行此类操作,而是在加载表单后执行。
然后,如果您有 超时,则您不会等待表单加载并且可以反馈它正在进行的事实,或者如果有exception
你没有撕掉 表格。
您还会捕获任何 异常 ,并给出可能发生的故障模式的一些通知。
背景
表单构造函数 在加载(呈现)表单之前运行,因此最好不要在其中做任何昂贵的事情,事实上这对任何构造函数都是如此。构造函数用于初始化 class/struct 需要运行的最小状态。
关于表单构造函数,如果在构造过程中有一个很长的运行过程,直接影响表单加载,不会显示让用户(和您)挠头想知道为什么表单没有显示。更糟糕的是,如果存在 未处理的异常 您的表单永远不会加载
对此我深表歉意,感谢我学到的新知识。
我的问题的答案太简单了...一个月前我向我们的 api 添加了一个证书,但它似乎从未适用,其他人抱怨我们的产品存在类似问题正在服务器上使用。我什么都没想。
昨天他们让服务器离线几分钟以更换 PSU,一旦重新启动...我的证书已加载,所以现在它正在使用 https。
它不会 "load" 的原因实际上是因为服务器的超时时间需要大约 60 秒,所以在等待足够长的时间后填充。