Ich habe ein Problem damit, dass mein Browser die Inhaltstypen, die ich in meinen Antworten sende, nicht erkennt und versucht, die Datei herunterzuladen, anstatt sie anzuzeigen.Der Browser erkennt den Content Type-Header nicht korrekt
Ich habe eine generische Handler (mit dem Namen SPARQL.ashx) in ASP.Net geschrieben, die etwas Arbeit und produziert ein Objekt, das von zwei möglichen Arten ist. Entweder erhält es ein SPARQLResultSet oder ein Diagramm und legt dann den entsprechenden Inhaltstyp fest, bevor die entsprechende Save-Methode zum Senden des Inhalts an den Benutzer verwendet wird. Code-Fragment ist unten:
//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));
}
Mein Problem ist, dass mein Browser wird oft prompt die Ergebnisse herunterladen, anstatt sie trotz der Tatsache anzeigt, dass ein Format XML basiert und die andere Klartext basiert und so sollten beide anzeigbar in jedem modernen Browser.
Verhalten variiert von Browser zu Browser und einige werden zum Download unabhängig von Ergebnisformat und einige werden für die eine aber nicht die andere aufgefordert.
Muss ich IIS wahrscheinlich irgendwie konfigurieren, um sicherzustellen, dass die richtigen MIME-Typen gesendet werden. Für den Datensatz habe ich die offiziellen Dateierweiterungen und MIME-Typen in IIS registriert. Oder ist das ein Problem mit der Tatsache, dass ich einen generischen Handler verwende? Oder hat jemand andere Ideen, warum dies passieren könnte?
bearbeiten
Added Code aus MIMETypesHelper Klasse für Klarheit
/// <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.
}
Es könnte hilfreich sein, die genauen HTTP-Header, die von Ihrem Dienst zurückgegeben werden, zu posten. In Fiddler (www.fiddler2.com) können Sie einfach mit der rechten Maustaste auf die Sitzung klicken und Kopieren> Überschriften wählen. – EricLaw