我有一个凝灰岩时间试图获得一个HttpRequestMessage的instace,这样我就可以从ActionFilter和/或正常的ASP.NET MVC控制器将其传递给下面的方法GetCacheOutputProvider
。我知道我可以从Web API,但这些示例呢?
public class CacheResetFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var cache = GlobalConfiguration.Configuration.CacheOutputConfiguration().GetCacheOutputProvider(HTTPREQUESTMESSAGE);
cache.Contains("eventid=" + eventId);
base.OnActionExecuted(filterContext);
}
3条答案
按热度按时间sy5wg1nm1#
1.在MVC控制器中,您可以执行以下操作:
2.在动作过滤中,您可以执行以下操作:
或
希望对你有帮助。
nwwlzxa72#
我不认为有一个简单的方法。你需要一个
HttpRequestMessage
类的示例,它在语义上表示一个(当前)请求。但您不在WebAPI内部,不处理任何WebAPI请求。因此,您无法轻松获得HttpRequestMessage
的有效示例是合乎逻辑的(如果你可以它会指向哪个URL?)。恕我直言,解决这个问题最明显的方法是使用CacheOutputConfiguration
中的RegisterCacheOutputProvider
方法注入您自己的缓存提供程序,该提供程序将返回一个IApiOutputCache
示例,该示例你可以使用其他方式直接访问(比如全局可见的singleton)。看起来IApiOutputCache
只有一个标准实现:MemoryCacheDefault
。所以看起来如果你从你注册的提供商那里返回它,你就没事了。如果你想成为一个更黑客的话,看起来所有的
MemoryCacheDefault
示例内部都使用相同的共享(静态)字段来完成实际工作,所以你可能只需要在过滤器或控制器中创建new MemoryCacheDefault
就可以了,但对我来说,这听起来像是一种黑客的方式,与我回答的第一部分的替代方案相比。odopli943#
我在检索httpRequestMessage时遇到了同样的问题,于是我选择了另一条路线。
1.识别:为什么我使用httpRequestMessage?-在我的情况下,我使用它来知道请求是否是 AJAX 请求。
1.修复:只需将httpRequestMessage的功能的用法替换为对应的功能。
我是怎么解决的?
ActionExecutingContext没有检索httpRequestmessage的方法,至少我不知道,我需要httpRequestmessage来获取头“X-Requested-With”。
相反,我使用actionExecutedContext的HttpContext的headers属性来查看是否有这些头,这解决了依赖httpRequestMessage的问题。
我知道这不是你要找的,但这给出了解决这个问题的不同观点,所以在这里发布。
谢谢大家!