【问题标题】:How to modify HTTP Response Using Filters in MVC 3 Razor?如何在 MVC 3 Razor 中使用过滤器修改 HTTP 响应?
【发布时间】:2012-10-10 19:13:50
【问题描述】:

_Layout.cshtml 中的 HtML 部分

<div id="header">
      <div class="logo"><a href="#"><img src="@Url.Content("~/!(IMAGEPATH)!/logo.png")" alt="" /></a></div>
      <div class="fb_like"><img src="@Url.Content("~/!(IMAGEPATH)!/fb_like_btn.png")" alt="" /></div>
      <div class="google_plus"><img src="@Url.Content("~/!(IMAGEPATH)!/google_plus.png")" alt="" /></div>
      <div class="header_rt">
        <ul>
          <li>Call us: 1500 258 789</li>
          <li><a href="#">Live chat</a></li>
          <li><a href="#">My Account</a></li>
          <li><a href="#">Sign in</a></li>
        </ul>
        <div class="search">
          <input type="text" value="Type your keyword..." class="srh_txt" />
          <input name="Submit" type="submit" value="Submit" class="srh_btn" />
        </div>
      </div>
    </div>
  <div id="main">
      @RenderBody()
 </div>

Index.cshtml 中的 Html 部分

@{
   ViewBag.Title = "Home Page";
}
<div class="clr"></div>
<div id="banner">
<div id="slider"><img src="@Url.Content("~/!(IMAGEPATH)!/banner.jpg")" alt="" /></div>
<div class="banner_rt">
  <div class="adv1"><img src="@Url.Content("~/!(IMAGEPATH)!/adv1.jpg")" alt="" /></div>
  <div class="adv2"><img src="@Url.Content("~/!(IMAGEPATH)!/adv2.jpg")" alt="" /></div>
</div>

使用下面的代码我可以替换!(IMAGEPATH)!仅在 _Layout.cshtml

   void Application_PostReleaseRequestState(object sender,EventArgs e)
   {
      if(string.CompareOrdinal(Response.ContentType,"text/html") == 0)
      {
         Response.Filter = new ResponseFilter(Response.Filter);
      }
   }

但上述代码不会影响 Index.cshtml 等子页面。请告诉我 ASP.NET MVC3 中的任何事件,例如 Classic ASP.NET 的旧 protected override void OnPreInit(EventArgs e) !!!!!!

我想知道在 MVC3 中渲染之前影响所有子页面的事件是什么?

【问题讨论】:

    标签: asp.net-mvc-3 http-response-codes response.filter


    【解决方案1】:

    基本控制器中,编写如下代码

    protected override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            var response = filterContext.HttpContext.Response;
            if (string.CompareOrdinal(response.ContentType, "text/html") == 0)
            {
                response.Filter = new ResponseFilter(response.Filter);
            }
            base.OnResultExecuting(filterContext);
        }
    

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2014-08-18
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多