假设我想上传一些文件。
我在 Razor 视图中的 HTML 表单如下所示:
@model SequereMe.Onboarding.Web.ViewModels.Branding.TenantBrandingViewModel
@{
}
<form asp-controller="BrandingSettings" asp-action="Save" asp-method="post" enctype="multipart/form-data">
<div class="form-group">
<input asp-for="TenantId" value=@Model.TenantId />
</div>
<div class="form-group">
<label for="logoFileUrl">Logo File Upload:</label>
<input asp-for="LogoFile" type="file" class="form-control-file" id="logoFileUrl" aria-describedby="fileHelp">
<h1>@Model.LogoFileUrl</h1>
</div>
<div class="form-group">
<label for="backgroundFileUrl">Background File Upload:</label>
<input asp-for="BackgroundFile" type="file" class="form-control-file" id="backgroundFileUrl" aria-describedby="fileHelp">
<h1>@Model.BackgroundFileUrl</h1>
</div>
<button type="submit" class="btn btn-primary">Save</button>
</form>
此 HTML 表单在提交时将触发的控制器操作是此 Web 控制器操作:
public async Task<IActionResult> Save(TenantBranding tenantBranding)
{
var result =
await _apiClient.PostAsync("/BrandingSettings", tenantBranding);
switch (result.Status)
{
case HttpStatusCode.NotFound:
case HttpStatusCode.BadRequest:
return new RedirectResult("~/Error/404");
case HttpStatusCode.OK:
//return View("Edit", result.Message.Content);
default:
return new RedirectResult("~/Error/500");
}
}
我进一步使用 Pathoschild.Http.Client.IClient 接口的 FluentClient 实现对此 Post 方法进行 API 调用:
[HttpPost]
public async Task<IActionResult> Post([FromBody] TenantBranding tenantBranding)
{
if (tenantBranding == null)
{
return new BadRequestObjectResult("Invalid Parameter: The incoming tenantBranding parameter is null");
}
if (tenantBranding.TenantId == Guid.Empty)
{
return new BadRequestObjectResult("Invalid Parameter: The tenantId in the incoming parameter tenantBranding is empty");
}
var result = _brandingLogic.Save(tenantBranding).Result;
if (!result)
{
return new JsonResult(500);
}
return Ok();
}
由于某种奇怪的原因tenantbranding
,Api Post 方法中的参数为空。从 Web Controller 到 Api Controller 的 ModelBinding 有问题。
这就是我的 TenantBranding 模型(Api)的样子:
public class TenantBranding
{
public Guid TenantId { get; set; }
public IEnumerable<FormFile> LogoFile { get; set; }
public IEnumerable<FormFile> BackgroundFile { get; set; }
public string DocumentType { get; set; }
}
这就是我在 Web 中的 TenantBranding 的样子:
public class TenantBranding
{
public Guid TenantId { get; set; }
public IFormFile LogoFile { get; set; }
public IFormFile BackgroundFile { get; set; }
}
但是tenantBranding
API方法中的参数显示为null,所以我不知道为什么会这样?可能与它有关IFormFile
吗?