我有一个凝灰岩时间试图获得HttpRequestMessage的实例,所以我可以从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);
}
答案 0 :(得分:1)
1.在MVC控制器中,您可以这样做:
public class HomeController : Controller
{
public ActionResult Test()
{
HttpRequestMessage httpRequestMessage =
HttpContext.Items["MS_HttpRequestMessage"] as HttpRequestMessage;
return View();
}
}
2.在动作过滤器中,您可以这样做:
public class HttpRequestMessageAttribute : System.Web.Mvc.ActionFilterAttribute
{
public override void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
{
HttpRequestMessage httpRequestMessage =
filterContext.HttpContext.Items["MS_HttpRequestMessage"] as HttpRequestMessage;
//var cache = GlobalConfiguration.Configuration.CacheOutputConfiguration().GetCacheOutputProvider(httpRequestMessage);
//cache.Contains("eventid=" + eventId);
base.OnActionExecuted(filterContext);
}
}
或强>
public class HttpRequestMessageAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestMessage httpRequestMessage =
filterContext.HttpContext.Items["MS_HttpRequestMessage"] as HttpRequestMessage;
base.OnActionExecuting(filterContext);
}
}
希望对你有帮助。
答案 1 :(得分:0)
我认为没有一种简单的方法。您需要一个HttpRequestMessage
类的实例,该实例表示对WebAPI的(当前)请求。但是您不在WebAPI中,并且不处理任何WebAPI请求。因此,合乎逻辑的是,您不能轻易拥有HttpRequestMessage
的有效实例(如果可以,它会指向哪个URL?)。恕我直言,最明显的解决方法是使用RegisterCacheOutputProvider
中的CacheOutputConfiguration
方法注入您自己的缓存提供程序,该缓存提供程序将返回您可以使用其他方法直接访问的IApiOutputCache
实例(如全局可见的单身人士)。看起来IApiOutputCache
只有一个标准实现:MemoryCacheDefault
。所以看起来如果你从注册的提供商处退回,你就没问题。
如果你想变得更加hacky,看起来所有MemoryCacheDefault
个实例都在内部使用相同的共享(静态)字段来完成实际的工作,所以你可能只需在你的过滤器中创建new MemoryCacheDefault
或控制器,现在仍然可以,但对我而言,与我的答案的第一部分中的替代方案相比,这听起来像是hacky。