【问题标题】:Post file as well as some parameter to web api将文件以及一些参数发布到 web api
【发布时间】:2016-06-14 07:18:09
【问题描述】:

我有 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":"没有 MediaTypeFormatter 可用于从具有媒体类型的内容中读取类型为“xxxx”的对象 '多部分/表单数据

我需要将文件和参数发布到我的 api。

使用 restsharp 发送数据

【问题讨论】:

    标签: c# json asp.net-web-api restsharp


    【解决方案1】:

    我能够使用以下控制台应用程序成功发布(基于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>();
            }
        }
    

    【讨论】:

    • 感谢重播。实际上我的问题昨天得到了解决。问题是我正在发送 multipart/data 类型的文件,参数为 json,因此在 Web API 中它拒绝转换获取上述错误.所以我使用 AddFile() 方法发送文件并使用 request.AddQueryParameter() 方法发送参数。我认为你的回答也是正确的。再次感谢。
    • 这对我不起作用我得到StatusCode: 415, ReasonPhrase: 'Unsupported Media Type'。我的文件可以是任何东西,word、pdf、图像或文本等
    猜你喜欢
    • 2014-06-08
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2015-04-22
    • 2017-01-16
    • 2018-08-10
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多