首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从ActionFilter或ASP.NET MVC Web控制器从Web API外部获取HttpRequestMessage

从ActionFilter或ASP.NET MVC Web控制器从Web API外部获取HttpRequestMessage
EN

Stack Overflow用户
提问于 2017-05-11 23:53:47
回答 2查看 4.7K关注 0票数 5

我正在尝试获取一个HttpRequestMessage的实例,这样我就可以将它从ActionFilter和/或普通的ASP.NET MVC控制器传递给下面的方法GetCacheOutputProvider。我知道我可以通过Web API实现,但是这些实例怎么办呢?

代码语言:javascript
运行
复制
public class CacheResetFilter : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            var cache = GlobalConfiguration.Configuration.CacheOutputConfiguration().GetCacheOutputProvider(HTTPREQUESTMESSAGE);
                cache.Contains("eventid=" + eventId);

            base.OnActionExecuted(filterContext);
        }
EN

回答 2

Stack Overflow用户

发布于 2017-05-12 00:30:38

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

代码语言:javascript
运行
复制
public class HomeController : Controller
{
   public ActionResult Test()
        {
            HttpRequestMessage httpRequestMessage =
                HttpContext.Items["MS_HttpRequestMessage"] as HttpRequestMessage;
            return View();        
        }
 }

2.在操作过滤器中,您可以这样做:

代码语言:javascript
运行
复制
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);
    }
}

代码语言:javascript
运行
复制
    public class HttpRequestMessageAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpRequestMessage httpRequestMessage =
                filterContext.HttpContext.Items["MS_HttpRequestMessage"] as HttpRequestMessage;

            base.OnActionExecuting(filterContext);
        }
   }

希望这对你有帮助。

票数 1
EN

Stack Overflow用户

发布于 2017-05-15 09:17:54

我不认为有一个简单的方法。您需要一个语义上表示对WebAPI的(当前)请求的HttpRequestMessage类的实例。但是您不在WebAPI中,并且不处理任何WebAPI请求。因此,不能轻易地拥有一个有效的HttpRequestMessage实例是合乎逻辑的(如果可以,它会指向什么URL?)。我想解决这个问题最明显的方法是使用CacheOutputConfiguration中的RegisterCacheOutputProvider方法注入您自己的缓存提供程序,该缓存提供程序将返回一个IApiOutputCache实例,您可以使用其他方式(如全局可见的单例)直接访问该实例。看起来只有一个标准的IApiOutputCache实现:MemoryCacheDefault。因此,看起来如果你从你的注册提供商那里退还它,你就可以了。

如果你想更老套,看起来所有的MemoryCacheDefault实例在内部都使用相同的共享(静态)字段来做实际工作,所以你可能只需要在你的过滤器或控制器中创建new MemoryCacheDefault,现在仍然可以,但对我来说,与我答案的第一部分相比,这听起来有点老套。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43920334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档