gpt4 book ai didi

web-services - 强制ASP.net Web服务返回JSON

转载 作者:行者123 更新时间:2023-12-03 11:58:24 26 4
gpt4 key购买 nike

我有一个用于Web应用程序的ASP.net Web服务,该服务根据我调用的函数向我返回XML或JSON数据。到目前为止,这一直很好,但是我遇到了一个问题。我想在我的页面上创建一个“导出”链接,该链接将下载一个JSON文件。链接的格式非常简单:

<a href="mywebserviceaddress/ExportFunc?itemId=2">Export This Item</a>

您可能会想到,这应该导出项目2。到目前为止,很好,是吗?

问题是,由于我没有特别要求接受的内容类型是JSON,因此ASP.net绝对拒绝发回除XML以外的任何内容,这不适用于这种情况。代码基本上如下:
    [WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public Item ExportItem(int itemId)
{
Context.Response.AddHeader("content-disposition", "attachment; filename=export.json"); //Makes it a download

return GetExportItem(itemId);
}

尽管我将ResponseFormat指定为JSON,但除非我通过AJAX(使用Google Web Toolkit,BTW)请求此方法,否则我始终会获取XML:
    RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "mywebserviceaddress/ExportFunc");
builder.setHeader("Content-type","application/json; charset=utf-8");
builder.setHeader("Accepts","application/json");
builder.sendRequest("{\"itemId\":2}", new RequestCallback(){...});

很好,但是AJAX不会给我一个下载对话框。有什么方法可以强制ASP.net返还给我JSON,而不管如何请求数据?在我看来,没有对此行为的手动替代就是对设计的全面监督。

快速回答:

首先,我要说的是,我认为womp的答案可能是长期发展的更好方法(转换为WCF),但是deostroll引导我找到了我将在不久的将来使用的答案。另外,应该指出的是,这似乎主要是因为我只想下载一个文件,可能无法在所有情况下都能正常工作。无论如何,这是我最终用来获得所需结果的代码:
    [WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void ExportItem(int itemId)
{
Item item = GetExportItem(itemId);

JavaScriptSerializer js = new JavaScriptSerializer();
string str = js.Serialize(item);

Context.Response.Clear();
Context.Response.ContentType = "application/json";
Context.Response.AddHeader("content-disposition", "attachment; filename=export.json");
Context.Response.AddHeader("content-length", str.Length.ToString());
Context.Response.Flush();
Context.Response.Write(str);
}

请注意void的返回类型(这意味着您的WDSL对于该功能将几乎无用)。返回任何东西都会搞砸正在手工构建的响应。

最佳答案

以下是两个论坛主题供您引用:

http://forums.asp.net/t/1118828.aspx

http://forums.asp.net/p/1054378/2338982.aspx#2338982

我不清楚。他们说专注于将内容类型设置为application / json。我以前没有使用过wcf,但是我认为您可以使用Response对象。

在响应对象上设置内容类型。执行response.write将您的json数据作为字符串传递,然后执行response.end。

关于web-services - 强制ASP.net Web服务返回JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1401549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com