相当于C#中的这段代码

时间:2019-10-25 09:01:05

标签: c# visual-studio https line

情况

我想向LINE开发者帐户的每个朋友发送特定消息。 我不知道该怎么做,但是我已经用PHP创建了它。 但是同样,我不知道如何在C#中做到这一点。

以下是有关我的编辑器和内容的一些信息。

编辑器: Visual Studio 2017

模板:我在https://marketplace.visualstudio.com/items?itemName=pierre3.LINEBotCSharpTemplate中获得了“ LINE Bot C#模板”

项目:我使用“ 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”方法 How to send data using the webrequest class

但是在剩下的代码中,我需要帮助来转换它。 如果您需要更多,我很乐意与您分享。

2 个答案:

答案 0 :(得分:3)

中井さん,StackOverflowへようこそ! 我对PHP不太了解,但是在我看来,您的代码除了发送简单的HTTP POST请求外没有做任何其他事情。您可以使用WebRequest在C#中实现相同的目的。这应该有助于: https://docs.microsoft.com/en-us/dotnet/api/system.net.webrequest?view=netframework-4.8

编辑: 关于注释中的要求,您不能像在PHP中那样将选项作为数组添加到WebRequest中。这些API只是不同。例如,您将这样创建一个WebRequest

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

然后代替

CURLOPT_HTTPHEADER => $headers,

你会做

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

对于您需要添加的每个标题。 (或者也许有一种添加标头集合的方法) 等等。

此外,在研究如何使用WebRequest进行POST时,似乎很笨拙。因此,您可能想改用HttpClient。这里有更多选择。 https://www.infoworld.com/article/3198673/my-two-cents-on-webclient-vs-httpclient-vs-httpwebrequest.html

最重要的是,仅将某些内容从PHP重写为C#并不是那么简单。那是两种截然不同的野兽。因此,您需要做更多的研究。

或者也许有人会来给你答案:)

答案 1 :(得分:0)

欢迎使用SO和C#。我尚未与LINE Bot合作,但我想我将提供一个通用示例,该示例可能有助于理解在C#中使用HTTP请求。

我已使用.NET Core和HttpClient为您创建了此示例应用程序作为示例。只需创建一个simple console app并将以下代码粘贴到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的便捷服务。