ContentType.Xml不存在?

时间:2016-09-25 23:27:22

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

This web page有一个ASP.NET MVC代码示例,其中包含以下行:

[Route("sitemap.xml")]
public ActionResult SitemapXml()
{
    var sitemapNodes = GetSitemapNodes(this.Url);
    string xml = GetSitemapDocument(sitemapNodes);
    return this.Content(xml, ContentType.Xml, Encoding.UTF8);
}

但如果我尝试将此代码插入MVC项目,Intellisense会给我错误:

  

名称' ContentType'在当前上下文中不存在

所以我为 System.Net.Mime 添加了using语句,但后来我收到错误:

  

'的ContentType'不包含' Xml'

的定义

所以,好吧,我放弃了。 ContentType.Xml的定义在哪里?

4 个答案:

答案 0 :(得分:2)

您可以在

中找到一些内置常量,但不附加到ContentType

他们受限制并且基于mime类型的层次结构(" text / xml"可以在Text.Xml中找到),所以不太适合您正在寻找的内容。他们有进一步的限制," Xml"仅在文本中定义,大多数人建议您使用" application / xml"而不是" text / xml"。

在上面的示例中,看起来作者有一个有用的git项目。您可以使用NuGet将其添加到项目中。搜索BoilerPlate.Web.MVC6(或5)。你可以看到the class he's using here。它对ContentType有很多有用的常量。

答案 1 :(得分:2)

MVC Controller类的Content方法的第二个参数需要MIME媒体类型字符串,例如"application/json""image/jpeg"

如果您正在寻找用于此参数的预定义常量,则在这些类中定义了一个有限的集合:

例如,您可以使用System.Net.Mime.MediaTypeNames.Text.Xml,相当于"text/xml"

但是,上述类中定义的常量列表远未完成。值得关注的是"application/json""application/xml""image/png",仅举几例。此外,没有音频或视频mime类型的类。如果您需要其中任何一个,则需要定义自己的常量。 (供参考,可以找到官方媒体类型的完整列表here。)

至于你的问题中引用的ContentType.Xml常量的定义,它看起来是在与MVC 5和MVC 6样本模板似乎依赖的同一作者的单独的Framework项目中定义的。可以找到框架和模板的源代码here on GitHub。可以找到ContentType课程here

答案 2 :(得分:0)

使用MVCContrib的XmlResult Action。

以下是类

的代码
public class XmlResult : ActionResult
{
    private object objectToSerialize;

    /// <summary>
    /// Initializes a new instance of the <see cref="XmlResult"/> class.
    /// </summary>
    /// <param name="objectToSerialize">The object to serialize to XML.</param>
    public XmlResult(object objectToSerialize)
    {
        this.objectToSerialize = objectToSerialize;
    }

    /// <summary>
    /// Gets the object to be serialized to XML.
    /// </summary>
    public object ObjectToSerialize
    {
        get { return this.objectToSerialize; }
    }

    /// <summary>
    /// Serialises the object that was passed into the constructor to XML and writes the corresponding XML to the result stream.
    /// </summary>
    /// <param name="context">The controller context for the current request.</param>
    public override void ExecuteResult(ControllerContext context)
    {
        if (this.objectToSerialize != null)
        {
            context.HttpContext.Response.Clear();
            var xs = new System.Xml.Serialization.XmlSerializer(this.objectToSerialize.GetType());
            context.HttpContext.Response.ContentType = "text/xml";
            xs.Serialize(context.HttpContext.Response.Output, this.objectToSerialize);
        }
    }
}

答案 3 :(得分:-1)

您应该更改代码以呈现xml。

public ActionResult Index()
{
    string xml = 
         "<?xml version='1.0' encoding='UTF-8'?>
          <urlset>
              <url>www.google.com</url>
          </urlset>";

    return Content(xml, "text/xml");
}