c# - 将文件以及一些参数发布到 web api

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

我有 Web api Controller 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);

网络接口(interface)方法:

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

关于c# - 将文件以及一些参数发布到 web api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37805400/

相关文章:

ios - Alamofire 发布 json 和响应 json

javascript - JSON - 查找对象的长度

asp.net - 使用另一种身份验证方法进行外部 api 调用

asp.net - 如何知道 oauth 访问 token 是否过期

.net - 默认情况下如何拒绝对 Web API 项目的授权

c# - C# 中的 'cross-thread operation error' 需要帮助

c# - 在返回带取消的 IAsyncEnumerable 的函数中迭代 IAsyncEnumerable

javascript - 使用传递的 JSON 数组创建 Google 折线图

c# - 一个 child 实现接口(interface)而另一个 child 不实现接口(interface)是否违反了里氏替换原则?

c# - 使用 Emgu CV(或 OpenCV)进行运动跟踪