情况
我想向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
但是在剩下的代码中,我需要帮助来转换它。 如果您需要更多,我很乐意与您分享。
答案 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的便捷服务。