Что эквивалентно этому коду в C # - PullRequest
0 голосов
/ 25 октября 2019

Ситуация

Я пытаюсь отправить определенное сообщение каждому другу в учетной записи разработчика моей LINE. Я понятия не имею, как это сделать, но я уже создал это на PHP. Но опять же, я не знаю, как это сделать в C #.

Вот некоторая информация о моем редакторе и прочее.

Редактор: Visual Studio 2017

Шаблон: Я получил "Шаблон LINE Bot C #" в https://marketplace.visualstudio.com/items?itemName=pierre3.LINEBotCSharpTemplate

Проект: Я создал проект с "LINEBotApplication"

Что я хочу сделать

Я хочу преобразовать приведенный ниже код в C #.

<?php
// HTTP REQUEST
$ch = curl_init('https://api.line.me/v2/bot/message/push');
$options = [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_BINARYTRANSFER => true,
    CURLOPT_HEADER => true,
    CURLOPT_POSTFIELDS => $post,
];
curl_setopt_array($ch, $options);

// To execute
$result = curl_exec($ch);

// To check eroors
$errno = curl_errno($ch);
if ($errno) {
    return;
}

// To get HTTP status
$info = curl_getinfo($ch);
$httpStatus = $info['http_code'];

$responseHeaderSize = $info['header_size'];
$body = substr($result, $responseHeaderSize);

// If 200
echo $httpStatus . ' ' . $body;

В чем я не уверен

Я не знаю, как полностью преобразовать данный код.

Возможно, я смогу преобразовать метод "curl_init", посмотрев на Как отправлять данные с помощью класса webrequest

Но с оставшимся кодом мне нужна помощь для его преобразования. Если вам нужно больше, я хотел бы поделиться.

Ответы [ 2 ]

3 голосов
/ 25 октября 2019

Я не очень разбираюсь в PHP, но мне кажется, что ваш код не делает ничего, кроме отправки простого HTTP-запроса POST. Вы можете добиться того же в C #, используя WebRequest. Это должно помочь: https://docs.microsoft.com/en-us/dotnet/api/system.net.webrequest?view=netframework-4.8

РЕДАКТИРОВАТЬ: Что касается того, что вы спросили в своем комментарии, вы не можете просто добавить опции в WebRequest в виде массива, как в PHP. Эти API просто разные. Например, вы бы сделали WebRequest, подобный этому

WebRequest myWebRequest=WebRequest.Create("https://api.line.me/v2/bot/message/push");

, тогда вместо

CURLOPT_HTTPHEADER => $headers,

Вы бы сделали

myWebRequest.Headers.Add([header name], [header value]);

для каждого заголовка, который нужно добавить,(Или, может быть, есть способ добавить коллекцию заголовков) И так далее.

Кроме того, при исследовании того, как сделать POST с помощью WebRequest, это кажется довольно неуклюжим. Так что вы можете использовать вместо HttpClient. Вот еще, что выбрать. https://www.infoworld.com/article/3198673/my-two-cents-on-webclient-vs-httpclient-vs-httpwebrequest.html

Суть в том, что не так просто переписать что-то из PHP в C #. Это два совершенно разных зверя. Поэтому вам нужно немного больше изучать.

Или, может быть, кто-то придет и даст вам ответ:)

0 голосов
/ 25 октября 2019

Добро пожаловать в SO и C #. Я не работал с LINE Bot, но подумал, что приведу общий пример, который может помочь понять работу с HTTP-запросом в C #.

Я создал этот пример приложения для вас в качестве примера, используя .NET Core и HttpClient. Просто создайте простое консольное приложение и вставьте следующий код в Program.cs файл:

using System;
using System.Net.Http;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static async Task Main()
        {
            var client = new HttpClient();

            var content = new StringContent("{ \"your\": \"content\", \"maybe\": \"json\" }");
            content.Headers.Add("X-SOME-RANDOM", "header-value");

            var response = await client.PostAsync("https://httpbin.org/post", content);

            var httpStatus = response.StatusCode;
            var body = await response.Content.ReadAsStringAsync();

            Console.WriteLine($"{httpStatus} {body}");
        }
    }
}

Надеюсь, это немного поможет. Веселитесь!

PS Спасибо httpbin.org за удобный сервис.

...