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

WebService 中操作 HttpRequest / HttpResponse (二)

发布时间:2020-12-17 01:17:03 所属栏目:安全 来源:网络整理
导读:我们可以通过 HttpContext.Current.Request/Response 将WebService 改造为更佳适合被HttpWebRequest调用的方法。 先来看看下面简单的示例: [WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

我们可以通过 HttpContext.Current.Request/Response 将WebService 改造为更佳适合被HttpWebRequest调用的方法。
先来看看下面简单的示例:

F5运行一下,你会看到一个自动生成的帮助页面,这个帮助页面只有在本地调试时能看到,发布后远程是无法看到这个帮助页面,但可以在
Web.config 里加上配置再发布即可见。
?

?
在帮助页面里,你可以看到Http的调用方式:

?
你可以按照这个方式用 HTTP POST 调用这个WebMethod:
【客户端】
?
这时 HttpResponse 返回的是一个Xml格式的字符串。


当然可以控制 Response.ContentType 来返回Xml以外的格式,比如:json,image等
【服务端】

【客户端】

?


如果希望用HTTP GET方式调用WebMethod,则需要使用 ScriptMethod 特性:[ScriptMethod(UseHttpGet=true)],此特性用于指定可从客户端脚本调用的方法的信息。使用此特性可以指定可用于调用方法的 HTTP 谓词(GET 或 POST)。它还使您可以指定是要使用 JSON 还是 XML 对响应进行格式设置。 使用 ScriptMethod 特性时,同时要使用:[System.Web.Script.Services.ScriptService] (Service1类上的特性)

【服务端】

【客户端】

注意:GET调用时是通过Url传值,如果是string需要使用 data='test' 两边加上单引号,因为使用json反序列化。没有引号直接当成是数值转换会出错。(将抛出 500 的服务端错误)


ScriptMethod 还有一个参数可以控制输出 ResponseFormat,所以没有必要直接控制 Response.ContentType,直接返回即可。
【服务端】

但这样返回的Json并不单纯:)

{"d":{"__type":"WebSvcHttp.Task","ID":"1b6d28b961324c69a690204bc07922ea","Title" :"test"}}

一番改造,WebMethod 也能成为 REST 架构风格的 Web API,但是它还无法实现 UrlRewrite,返回的Json也不够单纯,控制也还达不到WCF那么强大。不过简单应用也足够了。

(编辑:李大同)

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

    推荐文章
      热点阅读