ブラウザが応答で送信しているコンテンツタイプを認識できず、ファイルを表示せずにダウンロードしようとしているという問題があります。
ASP.Netで記述された汎用ハンドラー(SPARQL.ashxという名前)があります。これは、いくつかの作業を実行し、2つの可能なタイプのオブジェクトを生成します。SPARQLResultSetまたはグラフを取得し、適切なSaveメソッドを使用してコンテンツをユーザーに送信する前に、適切なコンテンツタイプを設定します。コードフラグメントは以下のとおりです。
//Execute the Query
Object result = store.ExecuteQuery(sparqlquery);
if (result is SPARQLResultSet)
{
//Return as SPARQL Results XML Format
context.Response.ContentType = MIMETypesHelper.SPARQL[0];
SPARQLResultSet resultset = (SPARQLResultSet)result;
resultset.Save(new StreamWriter(context.Response.OutputStream));
}
else if (result is Graph)
{
//Return as Turtle
context.Response.ContentType = MIMETypesHelper.Turtle[0];
Graph g = (Graph)result;
TurtleWriter ttlwriter = new TurtleWriter();
ttlwriter.PrettyPrintMode = true;
ttlwriter.Save(g, new StreamWriter(context.Response.OutputStream));
}
私の問題は、一方の形式がXMLベースで、もう一方の形式がプレーンテキストベースであるにもかかわらず、結果を表示するのではなくダウンロードするようにブラウザが頻繁に要求することです。したがって、どちらも最新のブラウザで表示できるはずです。
動作はブラウザごとに異なり、結果の形式に関係なくダウンロードを求めるプロンプトが表示されるものもあれば、一方の形式ではなく他方の形式でダウンロードを要求するものもあります。
正しいMIMEタイプが送信されるように、IISを何らかの方法で構成する必要がありますか。記録として、IISに登録されている公式のファイル拡張子とMIMEタイプがあります。それとも、これは私が汎用ハンドラーを使用しているという事実の問題ですか?それとも、なぜこれが起こっているのか、他のアイデアがありますか?
編集
わかりやすくするために、MIMETypesHelperクラスからコードを追加しました
/// <summary>
/// Helper Class containing arrays of MIME Types for the various RDF Concrete Syntaxes
/// </summary>
/// <remarks>The first type in each array is the canonical type that should be used</remarks>
public class MIMETypesHelper
{
/// <summary>
/// MIME Types for Turtle
/// </summary>
public static string[] Turtle = { "text/turtle", "application/x-turtle", "application/turtle" };
/// <summary>
/// MIME Types for RDF/XML
/// </summary>
public static string[] RDFXML = { "application/rdf+xml" };
/// <summary>
/// MIME Types for Notation 3
/// </summary>
public static string[] Notation3 = { "text/n3", "text/rdf+n3" };
/// <summary>
/// MIME Types for NTriples
/// </summary>
public static string[] NTriples = { "text/plain" };
/// <summary>
/// MIME Types for SPARQL Result Sets
/// </summary>
public static string[] SPARQL = { "application/sparql-results+xml" };
///etc.
}