使用Asp.NET Core 3.1框架将文件上传到服务器时,如何使用IFormFile作为属性?

用户名

我正在尝试创建一个处理存储文件的Web API。

Asp.Net核心1.0+框架附带IFormFile接口,该接口允许将文件绑定到视图模型。有关在ASP.NET Core中上传文件文档指出以下内容

IFormFile可以直接用作操作方法参数或绑定模型属性。

当我将其IFormFile用作操作方法的参数时,它没有任何问题。但就我而言,我想将其用作模型的属性,因为除了绑定自定义验证规则外,我还希望绑定其他值。这是我的视图模型。

public class NewFile
{
    [Required]
    [MinFileSize(125), MaxFileSize(5 * 1024 * 1024)]
    [AllowedExtensions(new[] { ".jpg", ".png", ".gif", ".jpeg", ".tiff" })]
    public IFormFile File { get; set; }

    [Required]
    public int? CustomField1 { get; set; }

    [Required]
    public int? CustomField2 { get; set; }

    [Required]
    public int? CustomField3 { get; set; }
}

这是我的客户请求代码和接受文件的服务器代码。为了简单起见,两种方法都放在同一控制器中。但实际上,“客户端”方法将被放置在一个单独的应用程序中,该应用程序通过文件进行发送。

[ApiController, Route("api/[controller]")]
public class FilesController : ControllerBase
{
    [HttpGet("client")]
    public async Task<IActionResult> Client()
    {
        using HttpClient client = new HttpClient();

        // we need to send a request with multipart/form-data
        var multiForm = new MultipartFormDataContent
        {
            // add API method parameters
            { new StringContent("CustomField1"), "1" },
            { new StringContent("CustomField2"), "1234" },
            { new StringContent("CustomField3"), "5" },
        };

        // add file and directly upload it
        using FileStream fs = System.IO.File.OpenRead("C:/1.jpg");
        multiForm.Add(new StreamContent(fs), "file", "1.jpg");

        // send request to API
        var responce = await client.PostAsync("https://localhost:123/api/files/store", multiForm);

        return Content("Done");
    }

    [HttpPost("store")]
    public async Task<IActionResult> Store(NewFile model)
    {
        if (ModelState.IsValid)
        {
            try
            {
                var filename = MakeFileName(model, Path.GetFileName(model.File.FileName));

                Directory.CreateDirectory(Path.GetDirectoryName(filename));

                using var stream = new FileStream(filename, FileMode.Create);
                await model.File.CopyToAsync(stream);

                return PhysicalFile(filename, "application/octet-stream");
            }
            catch (Exception e)
            {
                return Problem(e.Message);
            }
        }

        // Are there a better way to display validation errors when using Web API?
        var errors = string.Join("; ", ModelState.Values.SelectMany(v => v.Errors).Select(v => v.ErrorMessage));

        return Problem(errors);
    }
}

当我发出请求时,我收到以下错误,但store由于我在该处放置了一个断点,但该请求从未到达该方法,但从未在该处出现。

StatusCode:415,ReasonPhrase:“不受支持的媒体类型”,版本:1.1,内容:System.Net.Http.HttpConnectionResponseContent

如何正确地将文件发送到服务器并将其绑定到File视图模型上属性?

恩科西

ApiController 默认情况下,期望JSON,除非另有明确说明

用于[FromForm]在请求正文中使用表单数据绑定模型。

public async Task<IActionResult> Store([FromForm]NewFile model) {
    //...
}. 

ASP.NET Core中的参考模型绑定

CustomField1,CustomField2和CustomField3`为空,即使它们按照我在原始问题中看到的方式发送

客户端没有正确发送其他字段。您已切换内容和字段名称

var multiForm = new MultipartFormDataContent {
    // add API method parameters
    { new StringContent("1"), "CustomField1" },
    { new StringContent("1234"), "CustomField2" },
    { new StringContent("5"), "CustomField3" },
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Ajax将文件上传到服务器(asp.net Web表单)?

来自分类Dev

在ASP.NET MVC中使用Ajax将文件和文本上传到服务器

来自分类Dev

使用AWSSDK.S3将文件上传到具有.net-core的IBM COS(兼容S3)

来自分类Dev

使用axios将Vue中的XML文件上传到ASP .NET Core

来自分类Dev

使用Angular将文件上传到ASP.net Core API

来自分类Dev

无法在 ASP.NET Core 中使用 D3 加载 .geojson 文件

来自分类Dev

将id_token与ASP.NET Core 3一起使用

来自分类Dev

Infragistics IgniteUI IGFileUpload不会将文件上传到ASP.NET MVC CORE 3.0中的服务器

来自分类Dev

使用 AWS SDK ASP.NET 将文件上传到 S3

来自分类Dev

.NET Core反射-如何在ASP.NET Core 3剃刀视图中查找属性的引用?

来自分类Dev

ASP.NET Core是否仍使用OWIN?

来自分类Dev

在ASP.NET Core中使用MimeMapping

来自分类Dev

在ASP.net Core中使用BeginCollectionItem

来自分类Dev

在ASP.NET Core中使用DirectoryServices

来自分类Dev

使用设置配置ASP.NET Core

来自分类Dev

在ASP.NET Core 3中使用来自单独类的Hub

来自分类Dev

使用ASP.NET CORE 3通过PayPal付款

来自分类Dev

使用ASP.NET Core 3中的中间件修改响应

来自分类Dev

将文件从Angular上传到ASP.NET Core

来自分类Dev

使用 MongoDb 在 Asp.NET Core 中上传文件

来自分类Dev

将文件上传到服务器并使用Ruby中的NET :: SCP gem删除原始文件

来自分类Dev

如何使用 ASP.NET Core API 连接 microsoft sql 服务器

来自分类Dev

使用VB.NET将文件上传到SFTP服务器(Visual Basic)

来自分类Dev

使用运行Identity Server 4的ASP.NET CORE 3身份验证服务器对ASP.NET MVC 5应用(目标.net 4.5)进行身份验证

来自分类Dev

如何在.Net Core 3 ASP.NET MVC中不使用第三方记录器的情况下登录文件?

来自分类Dev

AWS仅使用ID和密钥将文件上传到S3服务器

来自分类Dev

使用Cookie的ASP.NET Core .NET Framework测试

来自分类Dev

如何在ASP.NET Core 1和VSCode编辑器中使用WCF服务?

来自分类Dev

将NodeJS应用连接到SignalR(使用.NET Core 3)

Related 相关文章

  1. 1

    如何使用Ajax将文件上传到服务器(asp.net Web表单)?

  2. 2

    在ASP.NET MVC中使用Ajax将文件和文本上传到服务器

  3. 3

    使用AWSSDK.S3将文件上传到具有.net-core的IBM COS(兼容S3)

  4. 4

    使用axios将Vue中的XML文件上传到ASP .NET Core

  5. 5

    使用Angular将文件上传到ASP.net Core API

  6. 6

    无法在 ASP.NET Core 中使用 D3 加载 .geojson 文件

  7. 7

    将id_token与ASP.NET Core 3一起使用

  8. 8

    Infragistics IgniteUI IGFileUpload不会将文件上传到ASP.NET MVC CORE 3.0中的服务器

  9. 9

    使用 AWS SDK ASP.NET 将文件上传到 S3

  10. 10

    .NET Core反射-如何在ASP.NET Core 3剃刀视图中查找属性的引用?

  11. 11

    ASP.NET Core是否仍使用OWIN?

  12. 12

    在ASP.NET Core中使用MimeMapping

  13. 13

    在ASP.net Core中使用BeginCollectionItem

  14. 14

    在ASP.NET Core中使用DirectoryServices

  15. 15

    使用设置配置ASP.NET Core

  16. 16

    在ASP.NET Core 3中使用来自单独类的Hub

  17. 17

    使用ASP.NET CORE 3通过PayPal付款

  18. 18

    使用ASP.NET Core 3中的中间件修改响应

  19. 19

    将文件从Angular上传到ASP.NET Core

  20. 20

    使用 MongoDb 在 Asp.NET Core 中上传文件

  21. 21

    将文件上传到服务器并使用Ruby中的NET :: SCP gem删除原始文件

  22. 22

    如何使用 ASP.NET Core API 连接 microsoft sql 服务器

  23. 23

    使用VB.NET将文件上传到SFTP服务器(Visual Basic)

  24. 24

    使用运行Identity Server 4的ASP.NET CORE 3身份验证服务器对ASP.NET MVC 5应用(目标.net 4.5)进行身份验证

  25. 25

    如何在.Net Core 3 ASP.NET MVC中不使用第三方记录器的情况下登录文件?

  26. 26

    AWS仅使用ID和密钥将文件上传到S3服务器

  27. 27

    使用Cookie的ASP.NET Core .NET Framework测试

  28. 28

    如何在ASP.NET Core 1和VSCode编辑器中使用WCF服务?

  29. 29

    将NodeJS应用连接到SignalR(使用.NET Core 3)

热门标签

归档