我的浏览器无法识别我在回复中发送的内容类型,试图下载文件而不是显示它,这是我的一个问题。
我有一个用ASP.NET编写的通用处理程序(名为sparql.ashx),它可以做一些工作并生成两种可能类型的对象。它要么得到一个sparqlResultSet,要么得到一个图形,然后在使用适当的保存方法将内容发送给用户之前设置适当的内容类型。代码片段如下:
//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类型?对于记录,我在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.
}