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();
- }
- }
- }