Response content-type will be set as text/html on OutputCache is assigned, even if there is an assignment inside action.
HomeController.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace WebApplication1.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } [OutputCache(Duration = 60)] public ActionResult NavigationScript() { Response.ContentType = "application/javascript"; return View(); } } }
Result
Custom a attribute and change content type after output cache processed.
ResponseHeaderAttribute.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace WebApplication1.Filter { public class ResponseHeaderAttribute : ActionFilterAttribute { public string ContentType { get; set; } public System.Text.Encoding ContentEncoding { get; set; } public override void OnResultExecuted(ResultExecutedContext filterContext) { if (!string.IsNullOrWhiteSpace(ContentType)) filterContext.HttpContext.Response.ContentType = ContentType; if (ContentEncoding != null) filterContext.HttpContext.Response.ContentEncoding = ContentEncoding; } } }
HomeController.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WebApplication1.Filter; namespace WebApplication1.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } [OutputCache(Duration = 60, Order = 1)] [ResponseHeader(ContentType = "application/javascript", Order = 2)] public ActionResult NavigationScript() { return View(); } } }