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

含引用字段的表单提交:向.NET API发送国家信息的最佳实践

前端向.NET API提交国家信息的最佳实践

应该发送ID还是国家名称?

优先发送国家ID,原因如下:

  • 数据一致性:ID是后端数据库的唯一标识,不会因为国家名称的变更(比如多语言翻译、拼写调整)导致数据关联错误,而名称容易出现歧义或变动。
  • 传输高效:ID通常是数字或短字符串,比完整国家名称更小巧,能减少网络传输的数据量。
  • 适配后端模型:你的Test类已经定义了CountryID字段,直接传ID可以和模型无缝映射,不需要额外的转换逻辑。

从你的前端代码来看,已经把mat-option的value绑定到了country.id,这完全符合最佳实践,继续保持即可。

是否需要在API控制器中验证?

必须做验证,核心验证点包括:

  • 存在性验证:检查传入的CountryID是否在后端的国家数据列表(数据库表)中真实存在,防止恶意传入无效ID。
  • 合法性验证:确保CountryID是有效的正整数,避免类型错误或非法数值(比如0、负数)。
  • 可选:如果业务上有国家访问限制,可额外验证当前用户是否有权选择该国家。

控制器验证示例(C#)

[HttpPost]
public IActionResult CreateTest([FromBody] Test testModel)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    // 验证CountryID是否存在于数据库
    var countryExists = _dbContext.Countries.Any(c => c.ID == testModel.CountryID);
    if (!countryExists)
    {
        ModelState.AddModelError("CountryID", "无效的国家ID");
        return BadRequest(ModelState);
    }

    // 执行后续业务逻辑
    _dbContext.Tests.Add(testModel);
    _dbContext.SaveChanges();
    return Ok(testModel);
}

模型层基础验证(数据注解)

也可以在模型类上添加数据注解,做基础的合法性校验:

public class Test
{
    public int ID { get; set; }

    [Required(ErrorMessage = "国家ID不能为空")]
    [Range(1, int.MaxValue, ErrorMessage = "国家ID必须是正整数")]
    public int CountryID { get; set; }

    public string StudentID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

内容的提问来源于stack exchange,提问作者Sam K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:48:32