【问题标题】:Sending file in API request .NET在 API 请求 .NET 中发送文件
【发布时间】:2022-02-06 03:05:47
【问题描述】:

我有一个端点,我通过 Postman 表单数据发送请求。请求有 2 个键。

message : string
file: File

这工作正常。所以,我想在 C# 代码中发送相同的请求。在c#中,我只需要从本地选择文件,以某种方式将其转换为正确的格式,将其分配给请求模型中的file 属性,我的意思是我无法更改请求发送的逻辑。我不能为 HttpRequest 或 MultipartFormDataContent 等编写额外的逻辑(我什至看不到这部分是如何发送的)。只需要将模型添加到此请求正文中。 我有模型 RequestModel

public class RequestModel
{
[JsonProperty("message")]
public string Message {get; set; }

[JsonProperty("file")]
public whateverType File {get; set; }
}

消息部分有效,因此我需要将本地文件分配给 File 属性。我怎样才能做到这一点。我几乎尝试了所有方法,但它不起作用。谢谢。

【问题讨论】:

  • .Net Core 还是 .net 框架?
  • 这能回答你的问题吗? How to upload files in asp.net core?
  • 这个 SO 线程与 asp.net 核心类似:stackoverflow.com/questions/54411250/…
  • in .net 6. 这些答案不能解决我的问题。只是我需要转换邮递员转换的方式。当我在邮递员中选择文件时,它如何转换此文件? c#中转换类型的等价物是什么?

标签: c# .net


【解决方案1】:

您不需要将文件保留在模型中。

这是一个只知道文件名就发布模型的示例。

var model = new RequestModel();

// ... fill the model with some data
model.Message = "test";
model.File = @"c:\test.jpg";

using var httpClient = new HttpClient();
{
    var form = new MultipartFormDataContent();
    form.Add(new StringContent(model.Message), nameof(RequestModel.Message));

    var bytes = File.ReadAllBytes(model.File);
    form.Add(new ByteArrayContent(bytes, 0, bytes.Length), "profile_pic", "hello1.jpg");
    var response = await httpClient.PostAsync("PostUrl", form);
    response.EnsureSuccessStatusCode();
    var sd = response.Content.ReadAsStringAsync().Result; // you should use await if your method is async ...
}

public class RequestModel
{
    public string Message { get; set; }

    public string File { get; set; } // simply use file-path
}

【讨论】:

  • 我从本地目录中选择文件(我不需要[FromForm]),主要是这个方法的主体。
  • 我试过这个:错误:无法创建 Microsoft.AspNetCore.Http.IFormFile 类型的实例。
  • ContentType = '((Microsoft.AspNetCore.Http.FormFile)model.attachment).ContentType' 抛出了类型为 'System.NullReferenceException' 的异常
  • 您应该创建FormFile 的实例而不是IFormFile
  • 是的,我正在创建 FormFile 的实例
猜你喜欢
  • 2022-01-14
  • 2023-01-19
  • 2019-12-13
  • 2022-08-11
  • 2019-01-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多