.net core中参数绑定特性你用过几个?快来看看哪些你还没有用过的

作者:微信公众号:【架构师老卢】
11-20 15:30
155

概述:在.NET Core中,[BindRequired]、[BindNever]、[FromHeader]、[FromQuery]、[FromRoute]、[FromForm]、[FromServices]、[FromBody]等特性通常用于控制控制器方法参数的绑定行为。以下是这些特性的详细说明、使用方法以及使用示例

在.NET Core中,[BindRequired]、[BindNever]、[FromHeader]、[FromQuery]、[FromRoute]、[FromForm]、[FromServices]、[FromBody]等特性通常用于控制控制器方法参数的绑定行为。以下是这些特性的详细说明、使用方法以及使用示例。

1. [BindRequired]

[BindRequired] 特性用于指示模型绑定系统此参数是必需的。如果无法绑定参数,则将生成400 Bad Request响应。

public IActionResult SomeAction([BindRequired] string requiredParam)
{
    // 使用 requiredParam 参数
    return Content($"BindRequired 示例,参数值:{requiredParam}");
}

2. [BindNever]

[BindNever] 特性用于防止模型绑定系统绑定此参数。通常用于防止从请求中绑定敏感信息。

public IActionResult SomeAction([BindNever] string sensitiveInfo)
{
    // sensitiveInfo 不会从请求中绑定
    return Content($"BindNever 示例,参数值:{sensitiveInfo}");
}

3. [FromHeader]

[FromHeader] 特性用于从HTTP标头中绑定参数的值。

public IActionResult SomeAction([FromHeader] string customHeader)
{
    // 从 HTTP 标头中获取 customHeader 值
    return Content($"FromHeader 示例,参数值:{customHeader}");
}

4. [FromQuery]

[FromQuery] 特性用于从查询字符串中绑定参数的值。

public IActionResult SomeAction([FromQuery] string queryParam)
{
    // 从查询字符串中获取 queryParam 值
    return Content($"FromQuery 示例,参数值:{queryParam}");
}

5. [FromRoute]

[FromRoute] 特性用于从路由中绑定参数的值。

[Route("api/[controller]")]
public class SampleController : Controller
{
    [HttpGet("SomeAction/{id}")]
    public IActionResult SomeAction([FromRoute] int id)
    {
        // 从路由中获取 id 值
        return Content($"FromRoute 示例,参数值:{id}");
    }
}

6. [FromForm]

[FromForm] 特性用于从表单中绑定参数的值。

public IActionResult SomeAction([FromForm] string formData)
{
    // 从表单中获取 formData 值
    return Content($"FromForm 示例,参数值:{formData}");
}

7. [FromServices]

[FromServices] 特性用于从服务容器中注入服务。

public interface IMyService
{
    string GetServiceData();
}

public class MyService : IMyService
{
    public string GetServiceData()
    {
        return "Service data";
    }
}

public class HomeController : Controller
{
    public IActionResult SomeAction([FromServices] IMyService myService)
    {
        // 使用从服务容器中注入的 myService
        string serviceData = myService.GetServiceData();
        return Content($"FromServices 示例,服务数据:{serviceData}");
    }
}

请注意,你需要将 IMyServiceMyService 注册到依赖注入容器中,例如在 Startup.cs 中的 ConfigureServices 方法中进行注册。

8. [FromBody]

[FromBody] 特性用于从请求正文中绑定参数的值。

public class CustomModel
{
    public string Property1 { get; set; }
    public int Property2 { get; set; }
}

public IActionResult SomeAction([FromBody] CustomModel customModel)
{
    // 从请求正文中获取 customModel 值
    return Content($"FromBody 示例,参数值:Property1={customModel.Property1}, Property2={customModel.Property2}");
}

在这个示例中,你可以通过发送包含 JSON 数据的 POST 请求来测试。确保请求的 Content-Typeapplication/json

这些示例提供了对这些参数绑定特性的基本了解。具体的运行结果取决于实际的请求和数据。在实际项目中,你可能还需要考虑模型验证等其他方面。

阅读排行