NET问答: 如何在 ASP.NET Core Web API 的 Response 中添加自定义的 Header ?

咨询区

JDawg

我正在将 Web API 2 移植到 ASP.NET Core Web API 上,以前我都直接在 Response 属性上添加自定义的 Header,如下代码所示:


HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.Add("X-Total-Count", count.ToString());
return ResponseMessage(response);

请问在 ASP.NET Core Web API 上该如何往 Header 中添加呢?

回答区

Timothy Macharia

很简单,你可以在 Action 中直接拿到 Response 属性,然后向 header 中添加你的自定义键值即可,参考如下代码:


public IActionResult SendResponse()
{
    Response.Headers.Add("X-Total-Count", "20");

    return Ok();
}   

对了,如果你想让所有的 Response 都添加 header,可以优先考虑 中间件,只需要在 Request Pipeline 中配置一下即可,参考代码如下:


        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.Use(async (context, next) =>
            {
                context.Response.Headers.Add("X-Developed-By", "Your Name");
                await next.Invoke();
            });

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

最后你会看到如下的 response header 中信息。

Simon_Weaver

使用 自定义特性 也是一个非常不错的办法,参考如下代码:


public class AddHeaderAttribute : ResultFilterAttribute
{
    private readonly string _name;
    private readonly string _value;

    public AddHeaderAttribute(string name, string value)
    {
        _name = name;
        _value = value;
    }

    public override void OnResultExecuting(ResultExecutingContext context)
    {
        context.HttpContext.Response.Headers.Add(_name, new string[] { _value });
        base.OnResultExecuting(context);
    }
}

然后可以将它标注在 API 的 Action 上,如下代码所示:

        [HttpGet]
        [AddHeader("X-MyHeader", "123")]
        public IEnumerable<WeatherForecast> Get()
        {
            var rng = new Random();
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)]
            })
            .ToArray();
        }

最后的效果图如下:

点评区

不管是 request 还是 response,向 header 中配置自定义信息太常见了,比如在 request 中使用经典的 basic 验证,感觉在 ASP.NET Core Web API 中更多的是倾向于 中间件 而不是传统的 特性方式,反正都能实现,看个人爱好吧。????????????

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET Core WebAPI 项目,你可以通过使用 Model Binding 功能来解析 JSON 数据并将其转换为 User 类对象。以下是一个简单的示例代码: 首先,确保你的 User 类具有与 JSON 数据字段对应的属性。例如: ```csharp public class User { public string Name { get; set; } public int Age { get; set; } // 其他属性... } ``` 然后,在你的控制器的相应方法,使用 `[FromBody]` 特性将 JSON 数据绑定到 User 类对象上。例如: ```csharp [HttpPost] public IActionResult CreateUser([FromBody] User user) { // 这里的 user 参数将包含从请求解析的 JSON 数据 // 执行其他操作,如保存到数据库 return Ok(); } ``` 在上述示例,`CreateUser` 方法使用 `[FromBody]` 特性将请求的 JSON 数据绑定到名为 `user` 的 User 类对象上。你可以根据需要在该方法执行相应的操作,比如将 user 对象保存到数据库。 当发送 POST 请求时,确保请求的 Content-Type 设置为 `application/json`,并提供符合 User 类结构的 JSON 数据。例如: ```http POST /api/users HTTP/1.1 Content-Type: application/json { "Name": "John", "Age": 25 } ``` 这样,ASP.NET Core WebAPI 就会自动将请求JSON 数据解析为 User 对象,并将其传递给 `CreateUser` 方法的 user 参数。 注意:为了使 Model Binding 可以正常工作,你需要在 `Startup.cs` 文件添加适当的配置。例如,在 `ConfigureServices` 方法添加以下代码: ```csharp services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; options.JsonSerializerOptions.PropertyNamingPolicy = null; }); ``` 这样,你就可以在 ASP.NET Core WebAPI 项目成功解析 JSON 数据成 User 类,并进行相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值