【问题标题】:ASP.NET MVC Application not outputting content-type headerASP.NET MVC 应用程序不输出内容类型标头
【发布时间】:2014-01-16 11:06:47
【问题描述】:

我目前有一个遗留 asp.net mvc 1 应用程序的问题,即在控制器上的 POST 操作中,响应中的内容类型标头丢失

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

这通常不是问题,但我们现在在网络服务器前面放置了一个 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,但在设置内容类型方面也没有任何区别

【问题讨论】:

  • 我不认为 MVC1 到 MVC2 是一个大的飞跃(它是 MVC3 带来了很多变化)。如果 MVC2 中有修复,也许您可​​以尝试升级?我认为 MVC1 在很多方面确实存在问题。

标签: c# asp.net asp.net-mvc mod-rewrite


【解决方案1】:

不确定它是否可用/适用于 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");
}

【讨论】:

    猜你喜欢
    • 2016-02-16
    • 2011-09-30
    • 1970-01-01
    • 2012-12-16
    • 2010-11-01
    • 2011-01-07
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    相关资源
    最近更新 更多