gpt4 book ai didi

c# - 基于自定义属性的 IHostBufferPolicySelector

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:05 25 4
gpt4 key购买 nike

我正在尝试根据自定义属性实现 IHostBufferPolicySelector(C# 和 Web API)。 IE。我想根据 Controller 方法中的属性来确定是否应该缓冲请求。像这样:

[NoBuffer]
[HttpPost]
public void UploadData()
{
// Read from the stream here...
}

我如何实现这一目标?我的 IHostBufferPolicySelector 实现需要一些方法来确定 NoBuffer 属性是否存在。

最佳答案

可以肯定地说,在当前的 Web API 架构下,这是行不通的。

事实上, Controller 级别在堆栈中太迟无法做出有关缓冲请求的决定。

IHostBufferPolicySelector 是一个全局 服务,根植于尽可能低的堆栈 - HttpControllerHandler,它是 Web API 的核心(它只是一个 HTTP 处理程序)。因此,实际上不可能像您希望的那样将其应用于特定请求。

Web API 在 HttpControllerHandler 内的内部 方法中对每个请求执行的操作是这样的:

// Choose a buffered or bufferless input stream based on user's policy
IHostBufferPolicySelector policySelector = _bufferPolicySelector.Value;
bool isInputBuffered = policySelector == null ? true : policySelector.UseBufferedInputStream(httpContextBase);
Stream inputStream = isInputBuffered
? requestBase.InputStream
: httpContextBase.ApplicationInstance.Request.GetBufferlessInputStream();

其中_bufferPolicySelector是一个全局配置值;因此它根据该全局值选择缓冲区方法。

我认为您可以将此记录在 ASP.NET Web 堆栈的 Codeplex 问题列表中作为提议的特色,但现在您必须使用一个全局 IHostBufferPolicySelector 设置。

我想象它可以实现的方式是,程序集必须在启动时扫描 [NoBuffer] 属性,并且必须使用映射创建一些静态配置不应发生缓冲的网址。然后,在最低级别,在 HttpControllerHandler 中,必须将此映射与传入请求 url 进行比较以确定缓冲策略。

关于c# - 基于自定义属性的 IHostBufferPolicySelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15004406/

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