gpt4 book ai didi

c# - 如何访问 ApiController 中的 Response

转载 作者:可可西里 更新时间:2023-11-01 16:37:44 25 4
gpt4 key购买 nike

我有以下方法:

private async Task<IHttpActionResult> UseHttpCache(Func<Task<IHttpActionResult>> operation) {
IHttpActionResult result = await operation();
//Add HTTP Headers here...
}

但我无法在 ControllerContext 中找到任何对 Response 的引用。

我可以将 IHttpActionResult 转换为 HttpResponseMessage 并在那里轻松设置 header ,但我不太喜欢将接口(interface)向下转换为实现。

有没有办法在 ApiController 中设置响应的 header ?

最佳答案

不完全确定这是否有效,因为我现在无法对其进行测试,但这个怎么样。

定义装饰原始结果并添加 header 值的自定义操作结果类:

public class CachedResult : IHttpActionResult
{
private readonly IHttpActionResult _decorated;
private readonly TimeSpan _maxAge;

public CachedResult(IHttpActionResult decorated, TimeSpan maxAge)
{
_decorated = decorated;
_maxAge = maxAge;
}

public async Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = await _decorated.ExecuteAsync(cancellationToken);
response.Headers.CacheControl = new CacheControlHeaderValue
{
Public = true,
MaxAge = _maxAge
};

return response;
}
}

然后通过构造函数传入你想要的配置。像这样:

private async Task<IHttpActionResult> UseHttpCache(Func<Task<IHttpActionResult>> operation)
{
IHttpActionResult result = await operation();
var maxAge = TimeSpan.FromHours(1);
return new CachedResult(result, maxAge);
}

关于c# - 如何访问 ApiController 中的 Response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27171532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com