<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。
总结以上是内存溢出为你收集整理的web服务 – 强制ASP.net webservice返回JSON全部内容,希望文章能够帮你解决web服务 – 强制ASP.net webservice返回JSON所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)