ASP.NET WebServices 因 URL 意外地以“/HelloWorld”结束,请求格式无法识别。
今天在使用Asp.net做一个WebServices时通过Get方式调用方法时却出现了以下错误(仅在Get请求下,POST下正常)
在网络和MSDN上了解到WebServices默认只启用 HttpSoap 和 Documentation,所以Get在默认情况下是不支持的,因此导致了此问题
指定 ASP.NET Web 服务可用来接收从客户端发送来的请求数据和返回响应数据的协议。协议可用来将请求数据与方法及其参数关联起来,将响应数据与方法及其返回值关联起来。
元素 | 说明 |
---|---|
add |
添加 ASP.NET Web 服务可用来接收从客户端发送来的请求数据和返回响应数据的指定协议。默认情况下,仅启用 HttpSoap 和 Documentation。 |
clear |
从配置文件的范围内移除所有的协议。 |
remove |
从配置文件的范围内移除用来处理请求和响应数据的指定协议。 |
知道了问题就好解决了,在web.config的system.web节点里添加Get协议即可
<configuration> <system.web> <webServices> <protocols> <!--移除所有的默认配置--> <clear/> <!--添加SOAP协议类型,系统默认--> <addname="HttpSoap"/> <!--添加POST协议类型--> <addname="HttpPost"/> <!--添加gET协议类型--> <addname="HttpGet"/> <!--添加Documentation协议类型,系统默认--> <addname="Documentation"/> </protocols> </webServices> </system.web> </configuration>
类型说明:
HttpSoap: 系统默认
HttpPost: POST类型,移除后本地测试并没有出错,但当把"HttpPostLocalhost"移除时本地测试就出错了"因 URL 意外地以“/method name”结束,请求格式无法识别。"
HttpGet: Get类型,如果移除或没有添加则出错"因 URL 意外地以“/method name”结束,请求格式无法识别。"见上图,如果Documentation也移除了则会出错"无法识别请求格式"见下图
Documentation:文件类型,如果移除该类型则会在访问方法列表页面会出错"无法识别请求格式。",但直接访问方法则不会
其他类型:如果移除则会“请求格式无法识别”或“无法识别请求格式。”错误,只需要添加对应的协议名即可
参考: