I am trying to upload files from the c# class using restClient (RestSharp) request. I am creating Method.POST method and add one Audio file to this request As multipart/form-data.
Server throws an exception when I execute the request.
Exception :
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 Request Code :
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);
Server Code :
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);
}
I guess problem is that stream.FormData["ReferenceType"] is not set correctly from request.
I don't want change the server code. because it working fine when you call from postman or browser.
Can somebody pls help? Thanks
I found the solution by just changing the few codes.
Updated Code :
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With