当前位置: 首页 > news >正文

<C#>.NET WebAPI 的 FromBody ,FromForm ,FromServices等详细解释

在 .NET 8 Web API 中,[FromBody][FromForm][FromHeader][FromKeyedServices][FromQuery][FromRoute][FromServices] 这些都是用于绑定控制器动作方法参数的特性,下面为你详细解释这些特性。

1. [FromBody]

  • 作用:从 HTTP 请求的消息体中绑定参数。一般用于处理 JSON 或 XML 格式的数据,常用于 POST、PUT 等请求。
  • 示例
[ApiController]
[Route("[controller]")]
public class UserController : ControllerBase
{[HttpPost]public IActionResult CreateUser([FromBody] User user){// 处理接收到的用户对象return Ok(user);}
}public class User
{public string Name { get; set; }public int Age { get; set; }
}
  • 请求示例
{"Name": "John Doe","Age": 30
}

2. [FromForm]

  • 作用:从 HTTP 请求的表单数据中绑定参数。通常用于处理 application/x-www-form-urlencodedmultipart/form-data 格式的表单数据。
  • 示例
[ApiController]
[Route("[controller]")]
public class FormController : ControllerBase
{[HttpPost]public IActionResult SubmitForm([FromForm] string name, [FromForm] int age){return Ok($"Name: {name}, Age: {age}");}
}
  • 请求示例(使用 HTML 表单)
<form action="/Form" method="post"><input type="text" name="name" /><input type="number" name="age" /><input type="submit" value="Submit" />
</form>

3. [FromHeader]

  • 作用:从 HTTP 请求的头部中绑定参数。当需要从请求头中获取特定信息时使用,比如 Authorization 头。
  • 示例
[ApiController]
[Route("[controller]")]
public class HeaderController : ControllerBase
{[HttpGet]public IActionResult GetData([FromHeader(Name = "X-Custom-Header")] string customHeader){return Ok($"Custom Header Value: {customHeader}");}
}
  • 请求示例(使用 Postman 或类似工具设置请求头)
X-Custom-Header: SomeValue

4. [FromKeyedServices]

  • 作用:从依赖注入容器中获取具有特定键的服务实例并绑定到参数。在使用键控服务时,可通过此特性按键获取服务。
  • 示例
// 注册键控服务
services.AddKeyedSingleton<IMyService, MyService>("key1");[ApiController]
[Route("[controller]")]
public class KeyedServiceController : ControllerBase
{[HttpGet]public IActionResult GetData([FromKeyedServices("key1")] IMyService service){return Ok(service.GetData());}
}public interface IMyService
{string GetData();
}public class MyService : IMyService
{public string GetData(){return "Some data";}
}

5. [FromQuery]

  • 作用:从 HTTP 请求的查询字符串中绑定参数。常用于 GET 请求,参数会附加在 URL 后面。
  • 示例
[ApiController]
[Route("[controller]")]
public class QueryController : ControllerBase
{[HttpGet]public IActionResult GetData([FromQuery] string name, [FromQuery] int age){return Ok($"Name: {name}, Age: {age}");}
}
  • 请求示例
/Query?name=John&age=30

6. [FromRoute]

  • 作用:从路由模板中绑定参数。路由模板定义了 URL 的结构,参数会嵌入到 URL 路径中。
  • 示例
[ApiController]
[Route("api/[controller]/{id}")]
public class RouteController : ControllerBase
{[HttpGet]public IActionResult GetData([FromRoute] int id){return Ok($"ID: {id}");}
}
  • 请求示例
/api/Route/123

7. [FromServices]

  • 作用:从依赖注入容器中获取服务实例并绑定到参数。当控制器动作方法需要使用某个服务时,可通过此特性注入该服务。
  • 示例
// 注册服务
services.AddScoped<IMyService, MyService>();[ApiController]
[Route("[controller]")]
public class ServiceController : ControllerBase
{[HttpGet]public IActionResult GetData([FromServices] IMyService service){return Ok(service.GetData());}
}public interface IMyService
{string GetData();
}public class MyService : IMyService
{public string GetData(){return "Some data";}
}

这些特性可以帮助开发者更灵活地处理不同来源的数据,提高代码的可读性和可维护性。

相关文章:

  • thinkphp实现图像验证码
  • 微信小程序中,将搜索组件获取的值传递给父页面(如 index 页面)可以通过 自定义事件 或 页面引用 实现
  • 电路安全智控系统与主机安全防护系统主要功能是什么
  • 社交媒体时代的隐私忧虑:聚焦Facebook
  • 使用Trae CN分析项目架构
  • Jenkins 多分支流水线: 如何创建用于 Jenkins 状态检查的 GitHub 应用
  • STL详解 - priority_queue
  • 探索元生代:ComfyUI 工作流与计算机视觉的奇妙邂逅
  • 【数据结构】第四弹——LinkedList与链表
  • chili3d调试笔记3 加入c++ 大模型对话方法 cmakelists精读
  • 学习海康VisionMaster之中线查找
  • 力扣每日打卡 2176. 统计数组中相等且可以被整除的数对(简单)
  • Docker使用、容器迁移
  • Vue实现版本检测与升级
  • 软件开发中的入静与禅定:探寻深度专注与灵感的源泉
  • 【人力资源管理系统】C#实现
  • Linux之基础命令
  • 笔记整理四
  • Java基础 4.18
  • ctfshow-大赛原题-web702
  • 伊朗南部港口火势蔓延,部分集装箱再次发生爆炸
  • 中央纪委办公厅公开通报3起整治形式主义为基层减负典型问题
  • 洛阳原副市长收礼品消费卡,河南通报6起违反八项规定典型问题
  • 持续更新丨伊朗内政部长:港口爆炸已致8人死亡750人受伤
  • 文旅部副部长饶权出任国家文物局局长
  • 中青报:“猿辅导员工猝死”事件上热搜,是对健康职场环境的共同关切