加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

web服务 – 强制ASP.net webservice返回JSON

发布时间:2020-12-14 22:23:00 所属栏目:资源 来源:网络整理
导读:我有一个ASP.net Web服务,我正在使用一个Web应用程序,它返回一个XML或JSON数据给我,这取决于我所调用的函数。到目前为止,这一直很好,但是我遇到了一个问题。我想在我的页面上创建一个将导出JSON文件的“导出”链接。链接格式非常简单: a href="mywebse
我有一个ASP.net Web服务,我正在使用一个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,我总是回收XML,除非我通过AJAX请求此方法(使用Google Web Toolkit,BTW):

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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读