c# – 发布文件以及web api的一些参数
作者:互联网
我有Web api控制器Uploads Controller,它有PostUpload方法将数据存储到数据库.
现在我试图将文件和一些参数发布到那个web api但是所有的尝试都失败了,就像传递数组列表,json对象一样,我们不能将文件和参数发布到web api?
var request = new RestRequest("Uploads", Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddHeader("Content-Type", "application/json");
request.AddFile("filename", Server.MapPath("/Images/137549014628194.R6MyHlYrIfIo3BWPIytG_height640.png"), "image/png");
request.AddFile("filename", Server.MapPath("/Images/137549014628194.R6MyHlYrIfIo3BWPIytG_height640.png"), "image/png");
request.AddFile("filename", Server.MapPath("/Images/137549014628194.R6MyHlYrIfIo3BWPIytG_height640.png"), "image/png");
request.AddParameter("participantsId", 2);
request.AddParameter("taskId", 77);
request.AddParameter("EnteredAnswerOptionId", 235);
IRestResponse response = createClient().Execute(request);
web api方法:
[HttpPost]
public string PostUpload(int? participantsId, int? taskId, int? EnteredAnswerOptionId)
{
var file = HttpContext.Current.Request.Files.Count > 0 ?
HttpContext.Current.Request.Files[0] : null;
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(HttpContext.Current.Server.MapPath("~/uploads"), fileName);
file.SaveAs(path);
}
return "/uploads/" + file.FileName;
}
但它给出了如下错误:
ExceptionMessage”:”No MediaTypeFormatter is available to read an object of type ‘xxxx’ from content with media type
‘multipart/form-data
我需要将文件和参数发布到我的api.
使用restsharp发送数据
解决方法:
我能够使用以下控制台应用程序成功发布(基于this post):
static void Main(string[] args)
{
RunAsync().Wait();
}
static async Task RunAsync()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:3963/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string filepath = "C:/Users/Popper/Desktop/Stackoverflow/MatchPositions.PNG";
string filename = "MatchPositions.PNG";
MultipartFormDataContent content = new MultipartFormDataContent();
ByteArrayContent fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(filepath));
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = filename };
content.Add(fileContent);
HttpResponseMessage response = await client.PostAsync("api/Upload?participantsId=2&taskId=77&EnteredAnswerOptionId=235", content);
string returnString = await response.Content.ReadAsAsync<string>();
}
}
标签:json,c,asp-net-web-api,restsharp 来源: https://codeday.me/bug/20190711/1430666.html