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
的定义在哪里?
答案 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");
}