gpt4 book ai didi

c# - 为什么此字符串未绑定(bind)到 ASP.NET .Core API 操作中的文件名参数?

转载 作者:行者123 更新时间:2023-11-30 23:02:22 26 4
gpt4 key购买 nike

我正在使用以下 header 和正文使用 fiddler 测试 API,并在 http://localhost:50063/api/image 上发布:

User-Agent: Fiddler
Content-Type: application/json; charset=utf-8
Host: localhost:50063
Content-Length: 32330

{"filename": "bot.png", "file": "base64 image ellided for brevity"}

示例代码来自 tutorial

[ApiController]
[Produces("application/json")]
[Route("api/Image")]
public class ImageController : Controller
{

// POST: api/image
[HttpPost]
public void Post(byte[] file, string filename)
{
string filePath = Path.Combine(_env.ContentRootPath, "wwwroot/images/upload", filename);
if (System.IO.File.Exists(filePath)) return;
System.IO.File.WriteAllBytes(filePath, file);
}

//...

}

首先我收到错误 500,文件名为空。我向 Controller 类添加了 [ApiController] 属性,但出现错误 400 filename invalid

当我在这里发出相同的请求时,filename 绑定(bind)到复杂类:

    [HttpPost("Profile")]
public void SaveProfile(ProfileViewModel model)
{
string filePath = Path.Combine(_env.ContentRootPath, "wwwroot/images/upload", model.FileName);
if (System.IO.File.Exists(model.FileName)) return;
System.IO.File.WriteAllBytes(filePath, model.File);
}

public class ProfileViewModel
{
public byte[] File { get; set; }
public string FileName { get; set; }
}

为什么会这样?

最佳答案

请求内容只能从正文中读取一次。

在第一个示例中,在填充数组后,它可以填充字符串,因为正文已被读取。

在第二个示例中,它在一次读取 body 时填充模型。

Once the request stream is read for a parameter, it's generally not possible to read the request stream again for binding other parameters.

引用 Model Binding in ASP.NET Core

关于c# - 为什么此字符串未绑定(bind)到 ASP.NET .Core API 操作中的文件名参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50507379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com