@dlysenko1311

Почему не работает запрос к апи?

У мегя есть такой скрипт:
public void Main()
		{

            string url = "https://api/test/test/test";
            string sinceDateTimeUtc = "2020-01-01T00:00:00.000";
            string tillDateTimeUtc = "2022-12-11T00:00:00.000";
            string Authorization = "secretKey=\"fasfsdffsafdsafsdaveqwv\"";

            var request = (HttpWebRequest)WebRequest.Create(url);
            var postData = "{" + "sinceDateTimeUtc" + ":" + $"'{sinceDateTimeUtc}'" + "," + "tillDateTimeUtc" + ":" + $"'{tillDateTimeUtc}'" + "}";  //, tillDateTimeUtc : '2022-12-11 00:00:00.000' }";

            var data = Encoding.UTF8.GetBytes(postData);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.ContentLength = data.Length;
            request.Accept = "application/json";
            request.Headers.Add("Authorization", Authorization);

            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            var response = request.GetResponse();
            var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

            
            var jobject = JObject.Parse(responseString);

            Console.WriteLine(jobject); 


            Dts.TaskResult = (int)ScriptResults.Success;
        }


Когда я его запускаю, то получаю такую ошибку:
63cfacbc31721018944591.png

ошибка в ввиде текста:
в System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   в System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   в Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()


Я определлил что скрипт не работает из-за этого:
using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }


Потому что если запустить такой код: то скрипт отрабатывает без ошибки
public void Main()
		{

            string url = "https://api/test/test/test";
            string sinceDateTimeUtc = "2020-01-01T00:00:00.000";
            string tillDateTimeUtc = "2022-12-11T00:00:00.000";
            string Authorization = "secretKey=\"fasfsdffsafdsafsdaveqwv\"";

            var request = (HttpWebRequest)WebRequest.Create(url);
            var postData = "{" + "sinceDateTimeUtc" + ":" + $"'{sinceDateTimeUtc}'" + "," + "tillDateTimeUtc" + ":" + $"'{tillDateTimeUtc}'" + "}";  //, tillDateTimeUtc : '2022-12-11 00:00:00.000' }";

            var data = Encoding.UTF8.GetBytes(postData);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.ContentLength = data.Length;
            request.Accept = "application/json";
            request.Headers.Add("Authorization", Authorization);

            //using (var stream = request.GetRequestStream())
            //{
            //    stream.Write(data, 0, data.Length);
            //}
  
            //var response = request.GetResponse();
            //var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
  
            //
            //var jobject = JObject.Parse(responseString);
  
            //Console.WriteLine(jobject); 


            Dts.TaskResult = (int)ScriptResults.Success;
        }


Как испрвить это?
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
@newtest1
Попробуй это

static HttpClient newclient = new HttpClient();

public static async Task Main(string[] args)
{
string url = "https://test/test/test";
string sinceDateTimeUtc = "2020-01-01T00:00:00.000";
string tillDateTimeUtc = "2022-12-11T00:00:00.000";
string Authorization = "bfskjdnflsanlk12fns";
var data = new Dictionary();
data["sinceDateTimeUtc"] = sinceDateTimeUtc;
data["tillDateTimeUtc"] = tillDateTimeUtc;
string result;
using (HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, url))
{

requestMessage.Headers.Add("Content-Type", "application/json");
requestMessage.Headers.Add("Accept", "application/json");
requestMessage.Headers.Add("Authorization", Authorization);
var response = await newclient.SendAsync(requestMessage);
result = await response.Content.ReadAsStringAsync();
};
System.Console.WriteLine(result);

}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы