<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";
    }
}

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

要实现一个简单的AI智能对话网站,可以采用以下步骤: 1. 设计前端页面:可以使用HTML、CSS和JavaScript等前端技术来设计前端页面,用于展示对话框和用户输入框等交互元素。建议使用Bootstrap等前端框架,可以提高开发效率。 2. 编写后端代码:可以使用C#语言编写后端代码,利用.net框架实现对话逻辑。建议使用ASP.NET等后端框架,可以方便地处理HTTP请求和响应。 3. 实现AI对话功能:可以使用开源的AI平台或者自己开发AI模型,实现对话功能。常用的AI平台有Microsoft Azure Cognitive Services、IBM Watson等。其中,Microsoft Azure Cognitive Services提供了多种AI服务,包括语音识别、自然语言处理等,可以方便地实现对话功能。 4. 集成前后端代码:将前端页面和后端代码集成在一起,实现完整的网站。可以使用Visual Studio等集成开发环境来进行开发。 下面是一个简单的AI智能对话网站的示例代码: 前端代码(HTML/CSS/JavaScript): ```html <!DOCTYPE html> <html> <head> <title>AI Chatbot</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <style type="text/css"> .chat_box { height: 400px; overflow-y: auto; border: 1px solid #ccc; padding: 10px; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col-md-6 col-md-offset-3"> <h2>AI Chatbot</h2> <div class="chat_box"></div> <div class="form-group"> <input type="text" class="form-control" id="user_input" placeholder="Enter your message..."> </div> </div> </div> </div> <script type="text/javascript"> $(document).ready(function() { $("#user_input").keypress(function(event) { if (event.which == 13) { var user_msg = $("#user_input").val(); var chat_html = '<p><strong>You:</strong> ' + user_msg + '</p>'; $(".chat_box").append(chat_html); $("#user_input").val(""); $.ajax({ url: "/api/chatbot", method: "POST", data: { message: user_msg }, success: function(response) { var bot_msg = response.message; var chat_html = '<p><strong>Bot:</strong> ' + bot_msg + '</p>'; $(".chat_box").append(chat_html); } }); } }); }); </script> </body> </html> ``` 后端代码(C#): ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace Chatbot.Controllers { public class ChatbotController : ApiController { [HttpPost] public IHttpActionResult Post([FromBody] Message message) { string bot_msg = GetResponse(message.Text); return Ok(new { message = bot_msg }); } private string GetResponse(string user_msg) { // TODO: Implement AI logic here return "Hello, I am a chatbot!"; } } public class Message { public string Text { get; set; } } } ``` 在上述代码中,前端页面使用Bootstrap框架实现了一个简单的聊天窗口和输入框。当用户输入信息后,前端通过AJAX方式将用户输入的内容发送给后端ChatbotController控制器的Post方法。在Post方法中,通过读取用户输入的信息,调用GetResponse方法获取AI模型返回的响应信息。最后,将响应信息返回给前端页面,前端页面展示AI模型返回的响应信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值