sendPhoto命令需要将参数照片定义为InputFile或String。电报BOT Api:如何使用C#发送照片?
该API文档告诉:
要发送的照片。您可以传递file_id作为字符串来重新发送已经在电报服务器上的照片 ,或者使用 multipart/form-data上传新照片。 而
INPUTFILE
该对象表示一个文件的内容被上传。必须是 ,通过浏览器上传文件为 的常用方式,使用multipart/form-data发布。
sendPhoto命令需要将参数照片定义为InputFile或String。电报BOT Api:如何使用C#发送照片?
该API文档告诉:
要发送的照片。您可以传递file_id作为字符串来重新发送已经在电报服务器上的照片 ,或者使用 multipart/form-data上传新照片。 而
INPUTFILE
该对象表示一个文件的内容被上传。必须是 ,通过浏览器上传文件为 的常用方式,使用multipart/form-data发布。
我不是一个C#开发,但我产生使用Postman这个代码,它使用RestSharp LIB
var client = new RestClient("https://api.telegram.org/bot%3Ctoken%3E/sendPhoto");
var request = new RestRequest(Method.POST);
request.AddHeader("postman-token", "7bb24813-8e63-0e5a-aa55-420a7d89a82c");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001");
request.AddParameter("multipart/form-data; boundary=---011000010111000001101001", "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"photo\"; filename=\"[object Object]\"\r\nContent-Type: false\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chat_id\"\r\n\r\n2314123\r\n-----011000010111000001101001--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
就调整它,它应该工作。
这里是一个工作,参数化的代码示例:
using System.Linq;
using System.IO;
using System.Text;
using System.Net.Http;
using System.Threading.Tasks;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
SendPhoto(args[0], args[1], args[2]).Wait();
}
public async static Task SendPhoto(string chatId, string filePath, string token)
{
var url = string.Format("https://api.telegram.org/bot{0}/sendPhoto", token);
var fileName = filePath.Split('\\').Last();
using (var form = new MultipartFormDataContent())
{
form.Add(new StringContent(chatId.ToString(), Encoding.UTF8), "chat_id");
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
form.Add(new StreamContent(fileStream), "photo", fileName);
using (var client = new HttpClient())
{
await client.PostAsync(url, form);
}
}
}
}
}
}