【发布时间】:2020-05-20 21:21:07
【问题描述】:
我一直在寻找这个问题的答案,但我一直没能找到答案,希望我能找到答案。诚然,我不是最好的 C# 程序员,这是出于需要,并且没有资源来帮助我开发它,所以我首先跳了起来。
如果我对 JSON 字符串进行硬编码,我有一些代码已成功将 JSON 数据发布到 API,但我想将 SQL 查询的结果设置为 OBJ,然后使用 NEWTONSOFT.JSON 将它们序列化以传递到 API 来代替硬编码的数据。
public void Main() {
string url = Dts.Variables["$Package::url"].Value.ToString();
string user = Dts.Variables["$Package::user"].Value.ToString();
string pwd = Dts.Variables["$Package::pwd"].GetSensitiveValue().ToString();
string result = Dts.Variables["User::JSON"].Value.ToString();
var JsonResult = JsonConvert.SerializeObject(result);
var request = (HttpWebRequest)WebRequest.Create(url);
string authHeader = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(user + ":" + pwd));
request.Headers.Add("Authorization", "Basic" + " " + authHeader);
request.ContentType = "application/json";
request.Accept = "application/json";
request.Method = "POST";
request.Headers.Add("Cookie: freedomIdentifyKey=XX");
result.ToString();
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(JsonResult);
streamWriter.Flush();
streamWriter.Close();
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result2 = streamReader.ReadToEnd();
}
}
Dts.TaskResult = (int)ScriptResults.Success;
}
我不断收到错误:脚本任务中的 0x1:调用的目标已引发异常。
有什么想法可以解决这个问题吗?
【问题讨论】:
-
首先我会使用 HttpClient 通过 HTTP 发送 JSON。您能否发布整个异常以及引发异常的行。
-
为了按照迈克尔的要求去做。在您的代码中添加一个断点并单步执行。你会得到一个更好的错误信息。但如果我不得不猜测,我认为这将是序列化类中有一个 null。
-
我添加了上面的完整代码来展示我是如何发送 JSON 包的。我还验证了没有 NULL 值是响应。通过在 SSMS 中运行查询。我正在从我的 Execute SQL 任务中保存完整的结果集,然后将该只读变量作为对象添加到我的脚本任务中......我可能会遗漏一些东西。
-
我添加了断点,它似乎在流编写器中,但我只是得到同样的错误,没有更多信息。
-
调试时要检查是否有inner-exception。 InvocationTargetException 只是告诉构造函数中发生了一些事情。