gpt4 book ai didi

c# - 使用 RestClient 上传文件作为 c# 中的多部分/表单数据

转载 作者:行者123 更新时间:2023-11-30 23:03:46 24 4
gpt4 key购买 nike

我正在尝试使用 restClient (RestSharp) 请求从 c# 类上传文件。我正在创建 Method.POST 方法并将一个音频文件添加到此请求作为 multipart/form-data。

服务器在我执行请求时抛出异常。

异常:

 System.ArgumentNullException: Value cannot be null.
Parameter name: value
at System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult)
at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase)
at Groove.Libraries.Helper.EnumHelper.ParseEnum[T](String value) in D:\project\Groove\Web\Groove\Libraries\Helper\EnumHelper.cs:line 47
at Groove.Controllers.Api.DocumentController.
<PostDocumentUpload>d__5.MoveNext()

RestClient 请求代码:

string api_url = "http://localhost:57997/";
var fullFileName = "Adios.mp3";
var filepath = @"C:\Users\Admin\Desktop\Adios.mp3";

RestClient client = new RestClient(ApiModel.api_url);

var request = new RestRequest("api/document", Method.POST);
request.AddFile(Path.GetFileNameWithoutExtension(fullFileName), filepath);
request.AddHeader("Content-Type", "multipart/form-data");
request.AddParameter("ReferenceType",28,ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

服务器代码:

public async Task<object> PostDocumentUpload()
{
try
{
// Make temp physical path where file to be saved
var tempPath =
HttpContext.Current.Server.MapPath(string.Format("{0}/{1}", Constants.MediaResourceFolder,
Constants.MediaResorceTempFolder));

// Check temporary path is exist or not, if not then create temporary folder
if (!Directory.Exists(tempPath))
{
Directory.CreateDirectory(tempPath);
}

// Create object of MyMultipartFormDataStreamProvider class
var stream = new MultipartHelper(tempPath);

// Save file at temp path
await RequestContext.Request.Content.ReadAsMultipartAsync(stream);

// Exception throw from Here,
ReferenceType referenceType = EnumHelper.ParseEnum<ReferenceType>(stream.FormData["ReferenceType"]);
// -------------other code
}
catch (Exception ex)
{
return FailureResponse(ex);
}

我想问题是 stream.FormData["ReferenceType"] 没有根据请求正确设置。

我不想更改服务器代码。因为当您从 postman 或浏览器调用时它工作正常。

有人可以帮忙吗?谢谢

最佳答案

我通过更改少数代码找到了解决方案。

更新代码:

       var request = new RestRequest("api/document", Method.POST);

request.AddFile(Path.GetFileNameWithoutExtension(fullFileName), filepath);
request.AddParameter("ReferenceType", ReferenceType.ToString());
request.AddParameter("RefId", StudioEventEntryId.ToString());

request.AlwaysMultipartFormData = true;

IRestResponse response = client.Execute(request);

关于c# - 使用 RestClient 上传文件作为 c# 中的多部分/表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49756549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com