【问题标题】:MVC find out if current web request is for an controller/action or a static resourceMVC 找出当前的 Web 请求是针对控制器/动作还是静态资源
【发布时间】:2012-05-30 15:56:01
【问题描述】:

我已经开发了一个 MVC Web 应用程序,对于收到的每个请求,我都需要改变文化。我有以下内容:

/// <summary>
/// Called from every HTTP request
/// </summary>
/// <param name="sender">Sender object</param>
/// <param name="e">Event args</param>
protected void Application_BeginRequest(object sender, EventArgs e)
{
    this.SetCulture();
}

现在文化设置完美运行,但是它通过这段代码运行每个请求,包括对 javascript 文件、css 文件、图像、字体等的调用。我只希望这个方法运行以执行操作。

在请求的这个阶段(即 Application_BeginRequest)是否有确定它是控制器/操作请求还是静态资源请求?

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    从 BaseController(它本身从 Controller 派生)派生所有控制器,并将代码放入基本控制器的 OnActionExecuting 函数中。

    public BaseController : Controller
    {
            protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                    SetCulture();
            }
    }
    

    【讨论】:

    • 如果一个视图调用了很多部分页面渲染会发生什么?这会被多次调用吗?由于费用,我需要将通话次数保持在最低限度
    • 是的,它每次都会被调用,但是有一个名为 IsChildAction 的属性,对于从视图呈现的局部视图来说是正确的。因此,如果 IsChildAction 为假,您应该只调用 SetCulture。看到这个帖子来自 haacked haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx
    • ps:调用 RenderAction() 将调用控制器管道。如果您只是在局部视图中有视图,则不使用局部视图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2023-03-07
    • 1970-01-01
    • 2012-02-09
    • 2016-04-13
    相关资源
    最近更新 更多