- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试根据自定义属性实现 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/
我正在尝试根据自定义属性实现 IHostBufferPolicySelector(C# 和 Web API)。 IE。我想根据 Controller 方法中的属性来确定是否应该缓冲请求。像这样: [N
我正在尝试在 WebApi 2 中上传大文件。我正在关注 this tutorial (这与 webapi 2 说明书中使用的配方相同)您在其中注册主机策略 public class NoBuffer
我正在尝试关注 this有关通过 Asp.Net Web 表单使用 Web Api 类上传大文件的网络博客。如果您浏览这篇文章,您会注意到,为了避免由于缓冲大文件而导致内存不足,他们建议重写 IHos
我是一名优秀的程序员,十分优秀!