微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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","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>();
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐