У меня проблема с тем, что мой браузер не может распознать типы контента, которые я отправляю в своих ответах, и пытаюсь загрузить файл вместо его отображения.
У меня есть общий обработчик (названный SPARQL.ashx), написанный на ASP.Net, который выполняет некоторую работу и создает объект, который имеет два возможных типа. Либо он получает SPARQLResultSet или Graph, а затем устанавливает соответствующий тип контента, прежде чем использовать соответствующий метод 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, а другой - на основе простого текста, и поэтому оба должны отображаться в любом современном браузере.
Поведение варьируется от браузера к браузеру, и некоторые будут запрашивать загрузку независимо от формата результата, а некоторые - для одного, но не для другого.
Возможно, мне потребуется каким-то образом настроить IIS, чтобы гарантировать отправку правильных типов MIME. Для записи у меня есть официальные расширения файлов и типы MIME, зарегистрированные в IIS. Или это проблема с тем фактом, что я использую универсальный обработчик? Или у кого-нибудь есть другие идеи, почему это может происходить?
Редактировать
Добавлен код из класса 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.
}