2014-01-16 32 views
0

我現在有一個問題與由此在一個控制器上的POST操作的傳統asp.net MVC 1應用,在響應中的Content-Type頭缺少ASP.NET MVC應用不輸出內容類型報頭

Cache-Control:private 
Date:Thu, 16 Jan 2014 10:43:52 GMT 
Server:Microsoft-IIS/7.5 
Set-Cookie:cartguid=; expires=Mon, 16-Dec-2013 10:43:53 GMT; path=/; HttpOnly 
Transfer-Encoding:chunked 

這通常不是問題,但我們現在在Web服務器前放置一個Apache反向代理服務器 - 並且mod_rewrite/mod_proxy在沒有從下游定義的內容類型時將內容類型默認爲text/plain應用。

因此,當我們在Apache方面的配置方面尋找選項時(我們有其他應用程序在逆向代理背後,我們注意到我們不試圖解決這個問題時會破壞其他的東西),我想知道從應用程序/ MVC的角度來看選項是什麼。在我結束的代碼具有以下簽名

[AcceptVerbs(HttpVerbs.Post)] 
[ValidateAntiForgeryToken] 
public ActionResult ProcessForm(FormCollection form, Model model) 
    { 
     // code here 
     return View("~/Views/viewpage.aspx"); 
    } 

我試圖到目前爲止做的是添加的這段代碼中的viewpage.aspx

<% HttpContext.Current.Response.AppendHeader("Content-Type", "text/html"); %> 

的頭,但它沒有任何效果。還更新了從剛剛返回一個以RedirectToAction的代碼,但它也沒有讓在設置內容類型

+1

我不認爲MVC1到MVC2是一個大的跳躍(它是MVC3帶來了很大的變化)。也許你可以嘗試升級,如果有MVC2修復?我認爲MVC1在很多領域都存在問題。 –

回答

0

不知道它是可用的條件有什麼區別與MVC1 /工作

您可能希望嘗試返回ContentResult而不是視圖。您可以將內容類型指定給ActionResult過濾器。

 public static string RenderViewAsString(string viewName, object model, 
     ControllerContext controllerContext, ViewDataDictionary viewData, TempDataDictionary tempData) 
    { 
     viewData.Model = model; 
     using (var stringWriter = new StringWriter()) 
     { 
      var result = ViewEngines.Engines.FindPartialView(controllerContext, viewName); 
      result.View.Render(
       new ViewContext(controllerContext, result.View, viewData, tempData, stringWriter), 
       stringWriter); 
      return stringWriter.GetStringBuilder().ToString(); 
     } 
    } 

然後

[AcceptVerbs(HttpVerbs.Post)] 
[ValidateAntiForgeryToken] 
public ActionResult ProcessForm(FormCollection form, Model model) 
{ 
    // code here 
    var resultAsString = RenderViewAsString("~/Views/viewpage.aspx", null, ControllerContext, ViewData, TempData); 
    return Content(resultAsString, "text/html"); 
}