从Web API之外的ActionFilter或ASP.NET MVC Web Controller获取HttpRequestMessage

Mik*_*ynn 5 asp.net asp.net-mvc caching asp.net-web-api

我有一个凝灰岩时间试图获得HttpRequestMessage的实例,所以我可以GetCacheOutputProvider从ActionFilter和/或普通的ASP.NET MVC控制器传递给下面的方法.我知道我可以从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);
        }
Run Code Online (Sandbox Code Playgroud)

Ash*_*man 1

1.在MVC控制器中你可以这样做:

public class HomeController : Controller
{
   public ActionResult Test()
        {
            HttpRequestMessage httpRequestMessage =
                HttpContext.Items["MS_HttpRequestMessage"] as HttpRequestMessage;
            return View();        
        }
 }
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者

    public class HttpRequestMessageAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpRequestMessage httpRequestMessage =
                filterContext.HttpContext.Items["MS_HttpRequestMessage"] as HttpRequestMessage;

            base.OnActionExecuting(filterContext);
        }
   }
Run Code Online (Sandbox Code Playgroud)

希望对您有帮助。