ASP.NET Core Web API中操作方法中的参数来源

发布时间 2023-07-16 17:03:34作者: JohnYang819

在ASP.NET Core Web API中,有多种方式可以传递参数给操作方法。以下是一些常见的参数传递方式:

  • 路由参数(Route Parameters):参数值从URL的路由中提取。
// Route: api/users/{id}
[HttpGet("api/users/{id}")]
public IActionResult GetUserById(int id)
{
    // 使用id执行操作
    return Ok();
}

当操作方法中的名称与路由中的名称不一样时,可以使用[FromRoute(Name="xxxx")]来指定。
如:

[HttpGet("school/{schoolName}/class/{classNo}")]
public ActionResult<Student[]> GetAll(string schoolName,[FromQuery(Name="classNo")]string classNum)

  • 查询字符串参数(Query String Parameters):参数值从URL的查询字符串中提取
// Route: api/users
[HttpGet("api/users")]
public IActionResult GetUsers(string name, int age)
{
    // 使用name和age执行操作
    return Ok();
}

请求示例:GET /api/users?name=John&age=25

同样地,如果操作方法中,参数名称与请求参数名称不一致,可以使用[FromQuery(Name="xxx")]来指定。


public ActionResult<Student[]> GetAll([FromQuery] string pageNum,[FromQuery(Name="pSize")]int pageSize)

请求:?pageNum=8&pSize=10.

  • 请求体参数(Request Body Parameters):参数值从请求的主体中提取。
public class CreateUserModel
{
    public string Name { get; set; }
    public int Age { get; set; }
}

// Route: api/users
[HttpPost("api/users")]
public IActionResult CreateUser([FromBody] CreateUserModel model)
{
    // 使用model的属性执行操作
    return Ok();
}

请求示例:POST /api/users,请求体:{"Name": "John", "Age": 25}

  • 标头参数(Header Parameters):参数值从请求的标头中提取。
// Route: api/users
[HttpGet("api/users")]
public IActionResult GetUsers()
{
    string apiKey = Request.Headers["API-Key"];
    // 使用apiKey执行操作
    return Ok();
}

请求示例:GET /api/users,标头:API-Key: secretkey

除了路由参数、查询字符串参数和请求体参数之外,还有其他常见的参数传递方式,如表单参数和多部分/form-data 参数。下面我将为你一一介绍这些方法,并提供相应的示例。

  • 表单参数(Form Parameters):
    在 ASP.NET Core Web API 中,你可以使用 [FromForm] 属性将参数绑定到表单数据。这适用于使用 application/x-www-form-urlencoded 格式或 multipart/form-data 格式提交的表单数据。
[HttpPost("api/users")]
public IActionResult CreateUser([FromForm] CreateUserModel model)
{
    // 使用表单数据执行操作
    return Ok();
}

多部分/form-data 参数:
如果你的 API 允许客户端上传文件或发送多部分数据,可以使用 IFormFile 类型接收文件上传。

[HttpPost("api/users/avatar")]
public IActionResult UploadAvatar([FromForm] IFormFile file)
{
    // 处理文件上传操作
    return Ok();
}

如果需要同时接收其他表单字段,你可以创建一个模型类来表示多部分/form-data 数据。

public class CreateUserWithAvatarModel
{
    public string Name { get; set; }
    public int Age { get; set; }
    public IFormFile Avatar { get; set; }
}

[HttpPost("api/users")]
public IActionResult CreateUserWithAvatar([FromForm] CreateUserWithAvatarModel model)
{
    // 使用模型中的数据执行操作,包括文件上传
    return Ok();
}

需要注意的是,对于多部分/form-data 数据,你需要确保在客户端请求中使用正确的 Content-Type 标头,以便服务器能够正确解析请求。