You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#接收浏览器上传文件报错:静态类型无法作为返回类型

解决ASP.NET文件上传接收的类型错误及实现步骤

错误原因

你用System.IO.File作为模型属性类型报错,是因为它是静态类,不能用来定义实例属性,自然没法接收前端上传的文件。

1. 修正模型属性类型

在ASP.NET Core中,接收上传文件要用到IFormFile类型(老版ASP.NET MVC用HttpPostedFileBase),修改后的模型代码:

using Microsoft.AspNetCore.Http;

public class ProductStickerModel
{
    [Required]
    [DataType(DataType.Upload)]
    [Display(Name = "Product Sticker Picture")]
    public IFormFile strFileName { get; set; }
}

2. 控制器接收并处理文件

在Post方法里通过模型绑定获取文件,再处理邮件发送逻辑:

[HttpPost]
public async Task<IActionResult> UploadAndSendEmail(ProductStickerModel model)
{
    if (ModelState.IsValid && model.strFileName != null)
    {
        // 临时保存文件到服务器(也可以直接读取流,不用保存到磁盘)
        var tempFilePath = Path.Combine(Path.GetTempPath(), model.strFileName.FileName);
        using (var stream = new FileStream(tempFilePath, FileMode.Create))
        {
            await model.strFileName.CopyToAsync(stream);
        }

        // 这里写发送邮件的逻辑,比如添加附件
        // 示例(用System.Net.Mail):
        // using var mail = new MailMessage("sender@example.com", "recipient@example.com");
        // mail.Subject = "Product Sticker";
        // mail.Body = "Attached is the product sticker picture.";
        // mail.Attachments.Add(new Attachment(tempFilePath));
        // using var smtp = new SmtpClient("smtp.example.com");
        // smtp.Send(mail);

        // 发送完成后删除临时文件
        System.IO.File.Delete(tempFilePath);

        return RedirectToAction("UploadSuccess");
    }
    return View(model);
}

3. 前端代码无需改动

你的HTML表单代码保持原样即可,asp-for会自动和IFormFile属性绑定:

<div class="form-group">
    <label asp-for="strFileName"></label>
    <input asp-for="strFileName" type="file" class="form-control" />
    <span asp-validation-for="strFileName" class="text-danger"></span>
</div>

关键注意点

  • 表单必须设置enctype="multipart/form-data",如果用ASP.NET Core的form TagHelper,框架会自动添加;手动写表单的话要加上:
    <form asp-action="UploadAndSendEmail" enctype="multipart/form-data" method="post">
        <!-- 表单内容 -->
    </form>
    
  • 若不想保存到磁盘,可直接读取model.strFileName.OpenReadStream()获取文件流,用于邮件附件。

内容的提问来源于stack exchange,提问作者Ty Vents

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:05:32