Ошибка аргумента когда обращаемся к своей DLL в кубике, почему?

selectel56

Client
Регистрация
11.12.2016
Сообщения
100
Благодарностей
53
Баллы
28
Друзья, создал свой вариант POST запроса в виде DLL, прикрутил ее, все работает когда вызываешь 3 аргумента, но когда все 6, то ругается.

Ошибка такая:

Тип Время Сообщение
03:31:32 Компиляция кода Ошибка в действии "CS1501" "No overload for method 'SendHttpRequest' takes 6 arguments". [Строка: 10; Cтолбец: 37]


Вот сам код запроса к DLL:
C#:
            var HttpClient = new MyHttpClient();
            string h1 = "Authorization1: Bearer abc123\nAuthorization2: Bearer abc123";
            string h2 = "{\"param1\":\"value1\",\"param2\":\"value2\"}";
            string url = "https://vivazzi.pro/test-request/";
            string proxy = "127.0.0.1:8888";
            bool useProxy = true;
            string contentType = "application/json";

            var result = HttpClient.SendHttpRequest(h1, h2, url, proxy, useProxy, contentType);

           return result;
105790


Вы спросите почему я сделал так? Потому что некоторые сайтыпалят некоторые запросы через стандартные методы встроенные в зенку, а тут отрабатываются запросы хорошо и приходит корректный ответ. Даже байты сравнивал, разницы была только в приветствии на уровне сертификата, может так и палил.

Что делаю не так? В визуал студио все пашет хорошо.

DLL код:

C#:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Net;

namespace MyLibrary
{
    public class MyHttpClient
    {

        public string SendHttpRequest(string h1, string h2, string url, string proxy = null, bool useProxy = false, string contentType = "application/json")
        {

           
            var request = new HttpRequestMessage(HttpMethod.Post, url);
            var uri = request.RequestUri;
            var mySP = ServicePointManager.FindServicePoint(uri);
            mySP.Expect100Continue = false; // Удалить заголовок  expect: '100-continue'

            var headers = ParseHeaders(h1);
            foreach (var header in headers)
            {
                request.Headers.TryAddWithoutValidation(header.Key, header.Value);
            }
           


            request.Content = new StringContent(h2, Encoding.UTF8, contentType);

            var handler = new HttpClientHandler();
            handler.Proxy = new System.Net.WebProxy(proxy);
            handler.UseProxy = useProxy;
            var client = new HttpClient(handler);

            client.DefaultRequestHeaders.ExpectContinue = false;

            var response = client.SendAsync(request).Result;
            var result = response.Content.ReadAsStringAsync().Result;

            return result;
        }

        static Dictionary<string, string> ParseHeaders(string headerString)
        {
            var headers = new Dictionary<string, string>();
            var lines = headerString.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (var line in lines)
            {
                var parts = line.Split(new[] { ':' }, 2);
                var key = parts[0].Trim();
                var value = parts[1].Trim();
                headers[key] = value;
            }
            return headers;
        }
    }
}
 

Вложения

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 512
Благодарностей
3 368
Баллы
113

selectel56

Client
Регистрация
11.12.2016
Сообщения
100
Благодарностей
53
Баллы
28

selectel56

Client
Регистрация
11.12.2016
Сообщения
100
Благодарностей
53
Баллы
28

selectel56

Client
Регистрация
11.12.2016
Сообщения
100
Благодарностей
53
Баллы
28
Друзья, всем спасибо, доперло, не то делал: собрал DLL под Netstandart 2.0 / Потом добавил ссылку на Netstandart 2.0. и все взлетело!
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113

selectel56

Client
Регистрация
11.12.2016
Сообщения
100
Благодарностей
53
Баллы
28
Странно тогда, может версии у на зенки разные, хотя вроде у меня не такое старье.

Теперь новый прикол:
Собрал новую DLL, которая возвращает ответ с заголовками, в зенке только тело ответа выдает, а в визуал студио заголовки и тело. Я опять чего то не так чтоли делаю? Вечно в среде зенки ничего не пашет из коробки, столько костылей надо.

Код дллшки:

C#:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Net;
using System.Linq;

namespace MyLibrary
{
    public class MyHttpClient
    {
        public string SendHttpRequest(string h1, string h2, string url, string proxy = null, bool useProxy = false, string contentType = "application/json")
        {
            var request = new HttpRequestMessage(HttpMethod.Post, url);
            var uri = request.RequestUri;
            var mySP = ServicePointManager.FindServicePoint(uri);
            mySP.Expect100Continue = false; // Удалить заголовок  expect: '100-continue'

            var headers = ParseHeaders(h1);
            foreach (var header in headers)
            {
                request.Headers.TryAddWithoutValidation(header.Key, header.Value);
            }

            request.Content = new StringContent(h2, Encoding.UTF8, contentType);

            var handler = new HttpClientHandler();
            handler.Proxy = new System.Net.WebProxy(proxy);
            handler.UseProxy = useProxy;
            var client = new HttpClient(handler);

            client.DefaultRequestHeaders.ExpectContinue = false;

            var response = client.SendAsync(request).Result;
            var headersString = string.Join(Environment.NewLine, response.Headers.Select(h => $"{h.Key}: {string.Join(", ", h.Value)}"));
            var contentString = response.Content.ReadAsStringAsync().Result;

            return $"{headersString}{Environment.NewLine}{Environment.NewLine}{contentString}";
        }

        static Dictionary<string, string> ParseHeaders(string headerString)
        {
            var headers = new Dictionary<string, string>();
            var lines = headerString.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (var line in lines)
            {
                var parts = line.Split(new[] { ':' }, 2);
                var key = parts[0].Trim();
                var value = parts[1].Trim();
                headers[key] = value;
            }
            return headers;
        }
    }
}
Запрос делаю такой (DLL сразу в однйо переменной выдает результат полного овтета сервака):


var myHttpClient = new MyHttpClient();
var headers = "Content-Type: application/json\nAuthorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l"; // пример заголовков
var body = "{\"name\": \"John\", \"age\": 30}"; // пример тела запроса
var url = "https://mail.ru"; // пример URL-адреса
string proxy = "127.0.0.1:8888";
bool useProxy = true;
string contentType = "application/json";

var response = myHttpClient.SendHttpRequest(headers, body, url);
using (StreamWriter writer = new StreamWriter(@"d:\1.txt"))
{
writer.Write(response);
}


Для чистоты эксперимента результат ложу в d:\1.txt
Точно этот же код выдает в визуале - в заголовками
Тут в зенке - только тело.

Друзья, у меня скоро крыша поедит в чем такие приколы не понимаю.
 

Вложения

selectel56

Client
Регистрация
11.12.2016
Сообщения
100
Благодарностей
53
Баллы
28
Не смог победить dll, не понял в чем причина, но переписал код напрямую, работает. Если кому то надо будет Post запрос там где не пашет стандартный от зенки то вот решение:

C#:
var h1 = "Content-Type: application/json\nAuthorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l";
var h2 = "{}";
var url = "https://mail.ru";
string proxy = "127.0.0.1:8888";
bool useProxy = false;
string contentType = "application/json";
            
var request = new HttpRequestMessage(HttpMethod.Post, url);
            
var uri = request.RequestUri;
var mySP = ServicePointManager.FindServicePoint(uri);
mySP.Expect100Continue = false;

var headers = ParseHeaders(h1);
foreach (var header in headers)
{
    var key = header.Key;
    var value = header.Value;
    request.Headers.TryAddWithoutValidation(key, value);
}


request.Content = new StringContent(h2, Encoding.UTF8, contentType);

var handler = new HttpClientHandler();
handler.Proxy = new System.Net.WebProxy(proxy);
handler.UseProxy = useProxy;
var client = new HttpClient(handler);

client.DefaultRequestHeaders.ExpectContinue = false;

var response = client.SendAsync(request).Result;
string headersString = response.Headers.ToString();
var contentString = response.Content.ReadAsStringAsync().Result;
//Console.WriteLine($"{headersString}\n\n{contentString}");
string output = $"{headersString}\n\n{contentString}";
//File.WriteAllText(@"d:/1.txt", output);
return output;
 Dictionary<string, string> ParseHeaders(string headerString)
{
    var headers2 = new Dictionary<string, string>();
    var lines = headerString.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 0; i < lines.Length; i++)
    {
        var parts = lines[i].Split(new[] { ':' }, 2);
        var key = parts[0].Trim();
        var value = parts[1].Trim();
        headers2[key] = value;
    }
    return headers2;
};
Код работает прекрасно через прокси и не передает паразитные заголовки типа Expect100Continue (с этим весь вечер бадался не мог понять че это за чудо). Ответ приходит в перменную заголовки/тело.

В using надо:

C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Http;
using System.IO;
Тут много не нужных, запихал как есть проверять не буду, если кому надо лишние удалите.
В Gac ссылки обязательны на NetStandart 2.0.dll и System.Net.Http.dll - без них код не пашет.

Всем спасибо за проявленный интерес, если кто сможет решить вопрос по DLL что выше писал - буду признателен.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 512
Благодарностей
3 368
Баллы
113
Зачем мне exe, не понимаю. Мне нужно чтобы DLL работала в проекте.
В Gac ссылки обязательны на NetStandart 2.0.dll и System.Net.Http.dll - без них код не пашет.
Тогда ожидайте в будущем вероятных конфликтов с постером из-за более новых версий dll (если они, конечно, будут).
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)