我正在尝试获取一个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);
}
发布于 2017-05-12 00:30:38
MVC 1.在控制器中,您可以这样做:
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);
}
}
希望这对你有帮助。
发布于 2017-05-15 09:17:54
我不认为有一个简单的方法。您需要一个语义上表示对WebAPI的(当前)请求的HttpRequestMessage
类的实例。但是您不在WebAPI中,并且不处理任何WebAPI请求。因此,不能轻易地拥有一个有效的HttpRequestMessage
实例是合乎逻辑的(如果可以,它会指向什么URL?)。我想解决这个问题最明显的方法是使用CacheOutputConfiguration
中的RegisterCacheOutputProvider
方法注入您自己的缓存提供程序,该缓存提供程序将返回一个IApiOutputCache
实例,您可以使用其他方式(如全局可见的单例)直接访问该实例。看起来只有一个标准的IApiOutputCache
实现:MemoryCacheDefault
。因此,看起来如果你从你的注册提供商那里退还它,你就可以了。
如果你想更老套,看起来所有的MemoryCacheDefault
实例在内部都使用相同的共享(静态)字段来做实际工作,所以你可能只需要在你的过滤器或控制器中创建new MemoryCacheDefault
,现在仍然可以,但对我来说,与我答案的第一部分相比,这听起来有点老套。
https://stackoverflow.com/questions/43920334
复制相似问题