2016-09-25 18 views
1

This web page行が含まASP.NET MVCのコードサンプルがありますContentType.Xmlは存在しませんか?

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

をしかし、私はMVCプロジェクトにこのコードを挿入しようとすると、インテリセンスは私にエラーを与える:

The name 'ContentType' does not exist in the current context

ので、私はSystem.Net.Mimeためusing文を追加しましたが、その後私はエラーを取得する:

'ContentType' does not contain a definition for 'Xml'

だから、大丈夫、私はあきらめます。 ContentType.Xmlの定義はどこですか?

+0

、ためのコードです。また、どのバージョンのMVCを使用していますか? – strongbutgood

+0

xmlファイルのMimeマッピングを望むなら、[System.Web.MimeMapping]の '静的なGetMimeMapping()'メソッドを使うことができます(https://msdn.microsoft.com/en-us/library/system.web .mimemapping.getmimemapping.aspx) –

+0

私はVisual Studio 2015、Update 3を使用していますが、これは問題ではないようです。私は文字列リテラルを渡すことができましたが、文字列がどんなフォーマットであるべきかを正確に把握する必要があり、このような定数の可読性を失うことになります。 –

答えて

2

あなたは見つけることができます

  • System.Net.Mime.MediaTypeNames.Text
    • System.Net.Mime.MediaTypeNames.Application
    • System.Net.Mime.MediaTypeNames.Image
    • で、ContentTypeをに添付されていないが、定数に内蔵され、彼らは限られており、ベースだいくつかのmime-type階層( "text/xml"はText.Xmlにあります)のsあなたが探しているものではありません。彼らは "Xml"がテキストでのみ定義され、 "text/xml"ではなく "application/xml"を使用することをお勧めします。

      上記の例では、作者がこれについて有用なgitプロジェクトを持っているようです。 NuGetを使用してプロジェクトに追加することができます。 BoilerPlate.Web.MVC6(または5)を検索します。 the class he's using hereが表示されます。 ContentTypeには多くの便利な定数があります。

    -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"); 
    } 
    
    +2

    これはどのようにして質問に答えますか?コードはXMLにレンダリングされます。質問は、ContentType引数の定義済みシンボルを見つけることと関係していました。 –

    1

    MVC ControllerクラスのContentメソッドの2番目のパラメータには、"application/json"または"image/jpeg"などのMIMEメディアタイプ文字列が必要です。

    の場合:

    このパラメータで使用する定義済みの定数を探しているならは、これらのクラスで定義された限定セットがありますたとえば、"text/xml"に相当するSystem.Net.Mime.MediaTypeNames.Text.Xmlを使用できます。

    しかし、上記のクラスで定義されている定数のリストは、どこにもありません。注目すべき欠点は、ほんのわずかな例として、"application/json","application/xml"および"image/png"です。また、オーディオまたはビデオのMIMEタイプのクラスはありません。これらが必要な場合は、独自の定数を定義する必要があります。 (参考のために、公式のメディアタイプの完全なリストはhereで見つけることができます。)

    あなたの質問で参照されているContentType.Xml定数の定義は、MVC 5とMVC 6のサンプルテンプレートが依存しているような同じ作者とは別のフレームワークプロジェクトで定義されているようです。フレームワークとテンプレートの両方のソースコードはhere on GitHubです。 ContentTypeクラスはhereです。

    0

    MVCContribのXmlResultアクションを使用してください。

    は、以下のクラスのMIME文字列として入力し渡さない理由を2番目の引数が文字列右であること

    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); 
         } 
        } 
    } 
    
    関連する問題