【问题标题】:Recognize if the client is requesting page or something else in ASP.NET MVC custom HttpModule?识别客户端是在请求页面还是 ASP.NET MVC 自定义 HttpModule 中的其他内容?
【发布时间】:2011-03-22 17:36:26
【问题描述】:

我已经编写了自定义 HttpModule,它会在每次 RequestEnd 事件被触发时执行一些操作。

public void Init(HttpApplication context) {
    context.EndRequest += EndEventHandler;
}

但我希望它仅在为请求 html 页面而触发 EndRequest 事件时才执行某些操作。不是在请求CSS 文件、图片或其他内容时。如何识别该特定请求中请求的内容类型,以便我决定要做什么?


注意:我想之前有人问过类似的问题,但我找不到它,如果可以的话,请添加到可能的重复项中。


编辑:更准确地说,如果该请求是由控制器操作处理的,我想在请求结束期间采取一些步骤(嗯,当我现在考虑它时,可能会调用操作过滤器对于所有操作都会比模块更好 - 是否有某种过滤器在返回重定向操作时不被调用?)。

【问题讨论】:

  • 每次请求后你想做什么,为什么?这可能有助于我们确定是否有其他方式或更好的方式来实现您的最终目标。
  • @George Stocker 我正在将一些有关请求的数据保存到数据库以进行数据挖掘...就像浏览器一样,无论是经过身份验证的用户还是匿名用户...
  • @George Stocker 所以你认为有更好的方法吗?
  • 达林已经发过了。

标签: c# asp.net asp.net-mvc httprequest httpmodule


【解决方案1】:

可以看内容类型:

if (HttpContext.Current.Response.ContentType == "text/html")
{
    ... you will be returning an HTML
}

或者如果您只想限制静态 HTML 页面,您也可以查看请求:

if (HttpContext.Current.Request.Url.AbsolutePath.EndsWith(".html"))
{
    ... it was a static html page that was requested
}

更新:

好的,我刚刚注意到您的问题被标记为asp.net-mvc。起初,当我看到一个 HttpModule 时,我以为你在做一个普通的 ASP.NET 应用程序(我什至无法想象 MVC 应用程序中的一个 HttpModule)。

现在这已经很清楚了,您显然可以使用global action filter,在其中您可以覆盖OnActionExecutingOnActionExecuted 方法,它们将分别在执行控制器操作之前和之后调用。

关于 OnActionExecuted 方法中的重定向操作的问题,您可以查看 filterContext.Result 并查看它是否为 RedirectToRouteResult 类型:

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        if (!(filterContext.Result is RedirectToRouteResult))
        {
            ...
        }
    }
}

【讨论】:

  • 我已经提到存在这种方法...... 2个问题:1.这总是可行吗? 2.这是正确的做法吗?我真正想做的是在我原来的问题下的第二条评论中解释。
  • 不,我的应用程序中并没有真正的静态 html。我想对将由控制器操作处理的所有请求进行一些“日志记录”操作。这是一个很好的表述,我将其添加到问题中。
  • @Darin Dimitrov +1 很棒的更新。所以这是收集有关请求的一些信息的正确方法,对吧?
  • @drasto,是的,动作过滤器绝对是在 MVC 管道执行的不同时刻运行一些自定义代码的正确方法。
  • @drasto,不,也在执行操作结果之前和之后(OnResultExecutingOnResultExecuted)。
猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 2012-09-02
  • 2011-07-12
相关资源
最近更新 更多