【C#】WebService接受跨域请求及返回json数据
2017-11-29 23:37 神马木牛 阅读(6743) 评论(0) 编辑 收藏 举报问题概述
通过Web Service发布服务供客户端调用是一种非常简单、方便、快速的手段,并且服务发布后会有一个服务说明页面,直观明了,如图:
WebService返回json数据
在Visual Studio中创建WebService的过程此处不再赘述,可参考:http://blog.csdn.net/yexuanbaby/article/details/9029605
默认WebService的方法定义我们是这样写的:
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
这种写法无论我们的返回值是否是json字符串,最终都会被xml包一层,不能直接作为json数据处理的,将返 回类型改为void,return部分改为如下部分:
Context.Response.Charset = "UTF-8";
Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Context.Response.Write(jsonStr);
Context.Response.End();
其中jsonStr是json字符串,为string类型的数据,这样返回的数据就不再是xml格式的,直接是json数据了。
Tips:关于c#如何将对象转为json字符串,可以使用JavaScriptSerializer 类。
服务端配置搞定跨域问题
关于如何使用Jsonp处理跨域问题,参考:http://www.cnblogs.com/lightmao/p/6083996.html
其实我们在web应用的配置文件web.config中添加以下节点就可以了,可以在Access-Control-Allow-Origin处设置允许跨域访问的域名,*表示接受所有的跨域请求。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
<add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>