【问题标题】:ASP.NET MVC and text/xml content typeASP.NET MVC 和 text/xml 内容类型
【发布时间】:2010-11-01 14:10:18
【问题描述】:

我想从一个动作中返回一个 View(),结果响应的内容类型应该是 text/xml 而不是默认的 text/html。

我尝试了以下方法,但没有成功:

Response.ContentType = "text/xml"; 
return View();

我知道您可以通过返回 ContentResult 来指定内容类型,但这不会呈现我的视图。

我希望我不需要将视图呈现为字符串然后使用return Content(),所以我可能忽略了一些简单的方法。

【问题讨论】:

  • 我很惊讶没有人发现这是重复的:stackoverflow.com/questions/134905/…
  • @TomasLycken,这可能是因为 legenden 和我自己将 XML 本身放在 View 中,只是希望设置 View 的 ContentType,而不是在 Controller 中构建 XML,然后将其传递给 View。这绝对是两种不同的方法。
  • 另外给大家注意的是,这个内容类型字符串可以引用为System.Net.Mime.MediaTypeNames.Text.Xml

标签: asp.net-mvc xml


【解决方案1】:

您是否尝试过在代码隐藏页面中通过视图的预渲染方法设置 response.content?这显然是假设您使用的是 webform 视图引擎

【讨论】:

    【解决方案2】:

    您需要渲染字符串。要返回 text/xml,请执行以下操作:

    return new ContentResult {
        ContentType = "text/xml",
        Content = UTF8.GetString(yourXmlString),
        ContentEncoding = System.Text.Encoding.UTF8
    }; 
    

    【讨论】:

    • 好吧,我已经知道这一点(在问题中指定),但我想避免它。
    • 对我有用,因为我想返回 XML 响应而不需要 aspx 视图页面。
    【解决方案3】:
    <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" 
        ContentType="text/xml" %>
    

    【讨论】:

    • 漂亮,我不知道您可以在页面本身上设置 ContentType。这太棒了:P
    • 如果你有剃刀视图,那么它应该是@{ Response.ContentType = System.Net.Mime.MediaTypeNames.Text.Xml; }
    【解决方案4】:

    您需要一个不会覆盖事物并生成 HTML 的视图,包括它自己的上下文类型。

    自定义视图可以直接呈现到 Response.Write(请参阅 Reflector 中的 JsonResult 以了解与您需要的非常相似的类)。

    要在没有中间字符串的情况下呈现 XML,请将您的 XML 保存到通过 Response.Output 创建的 XmlWriter

    【讨论】:

      【解决方案5】:

      用户控件 (ASCX) 不接受 ContentType="text/xml"。

      解决方案:

      public ActionResult xxx()
        {
           Response.ContentType = "text/xml";
           return View("xxx.ascx");
        }
      

      【讨论】:

        【解决方案6】:

        如果您正在寻找 Razor (.cshtml) 视图,请在视图代码中设置内容类型

        @{
            Response.ContentType = "text/xml";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-09
          • 2016-07-16
          • 1970-01-01
          • 2023-03-28
          • 2017-09-01
          相关资源
          最近更新 更多