zoukankan      html  css  js  c++  java
  • 【C#】WebService接受跨域请求及返回json数据

    问题概述

    通过Web Service发布服务供客户端调用是一种非常简单、方便、快速的手段,并且服务发布后会有一个服务说明页面,直观明了,如图:

    一般情况下,在web页面中的JavaScript中调用Web Service时,由于上述服务返回的数据是xml格式的,虽然js也能处理
    xml,但就是用着不太爽,如果能直接让webService返回json数据,那就再好不过了。
    此外,JavaScript访问webService时通常还会遇到跨域的问题,之前有提到过可以使用Jsonp处理,但也是比较麻烦的,需要服务端和客户端同时做好处理。

    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>






  • 相关阅读:
    python3安装crypto出错,及解决方法
    php中的引用
    算法
    HTTP协议
    jdk 1.8 InvocationHandler 中文注释
    Java实现多线程的几种方法
    shell编写显示ps相关脚本
    逆波兰表达式求值(后序表达式)
    155. 最小栈(leetcode简单题)
    字符串逆序
  • 原文地址:https://www.cnblogs.com/lightmao/p/7923362.html
Copyright © 2011-2022 走看看