我试图让以下代码作为json文件返回,而不是返回Aspx文件。 我在PHP中使用了类似的代码,但是,我无法在C#中复制它。我希望它以.json文件的形式响应。
string json = JsonConvert.SerializeObject(output, Formatting.Indented);
Response.Headers.Add("Content-type", "application/json; charset=utf-8");
Response.Headers.Add("Expires"," Mon, 26 Jul 1997 05:00:00 GMT");
Response.Headers.Add("Pragma.","no-cache");
Response.Cache.SetNoStore();
输出正常,我只是希望它被识别为.json文件。
答案 0 :(得分:5)
提升"文件下载"对话框你应该尝试Content-disposition
,我不知道它将如何与json
一起使用,但当我将它用于pdf
时,它对我来说很好。
string json = JsonConvert.SerializeObject(output, Formatting.Indented);
Response.Headers.Add("Content-type", "application/json; charset=utf-8");
Response.Headers.Add("Content-disposition", "attachment;filename=\"a.json\"");
Response.Headers.Add("Expires"," Mon, 26 Jul 1997 05:00:00 GMT");
Response.Headers.Add("Pragma.","no-cache");
Response.Cache.SetNoStore();
的链接
答案 1 :(得分:4)
尝试使用:
// note the case
Response.Headers.Add("Content-Type", "application/json; charset=utf-8");
甚至更好:
Response.ContentType = "application/json; charset=utf-8";
对于你似乎做的事情,我建议使用IHttpHandler
而不是aspx页面。您甚至可以将其配置为具有json扩展名(尽管扩展名不应该那么重要)。这是一个例子:
public class CustomHttpHandler : IHttpHandler
{
// return true to reuse (cache server-side) the result
// for the same request parameters or false, otherwise
public bool IsReusable { get { return true; } }
public void ProcessRequest(HttpContext context)
{
var response = context.Response;
// do with the response what you must
}
并在网络配置中配置它:
<configuration>
</system.web>
<httpHandlers>
<remove verb="*" path="*.asmx" />
<add verb="*"
path="*.asmx"
validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions" />
<add verb="*"
path="*_AppService.axd"
validate="false"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions" />
<add verb="GET,HEAD"
path="ScriptResource.axd"
type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions" validate="false" />
<!-- your handler here: -->
<add verb="GET"
path="CustomHttpHandler.json"
type="YourApp.CustomHttpHandler, YourApp" />
</httpHandlers>
</system.web>
</configuration>
您可以使用动词来使句柄对GET / POST或其他请求类型可访问,对所有请求使用"*"
。处理程序可以“〜/ CustomHttpHandler.json”访问 - 请注意添加的json扩展名(原始名称为.ashx)。您仍然必须将内容类型标题放在响应中。
答案 2 :(得分:2)
您可以使用“Content-Disposition”标题设置返回数据的文件名。
请参阅:http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html
var cd = new System.Net.Mime.ContentDisposition
{
FileName = "MyData.json",
// always prompt the user for downloading, set to true if you want
// the browser to try to show the file inline
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());