能否通过URL查询字符串调用带参数的ASMX服务?

25

我有一个asmx服务,它接受一个整数参数。我可以打开服务的URL并查看服务描述屏幕。从这里,我可以将查询参数输入表单并调用Web服务。

有没有办法直接从URL/查询字符串调用Web服务?

这个方法不起作用:

http://localhost:4653/MyService.asmx?op=MyWebMethod&intParameter=1

有什么想法吗?由于一些部署问题,我真的很想能够通过标准链接完成此操作。我是否需要将请求包装在普通的aspx页面中?

2个回答

53
您可以使用装饰器将您的方法修饰为允许 HTTP GET 请求,这样就能实现您想要的功能,像这样:

[WebMethod]  
[ScriptMethod(UseHttpGet=true)]
public string MyNiftyMethod(int myint)
{
    // ... code here
}

同时编辑web.config文件:

<system.web>
<webServices>
  <protocols>
    <add name="HttpGet"/>
  </protocols>

那么您就可以像这样调用此方法:

http://mysite.com/Service.asmx/MyNiftyMethod?myint=12345

注意:使用此GET请求的方法确实存在一些安全风险。根据MSDN文档中UseHttpGet的说明

如果您正在处理敏感数据或交易,则将 UseHttpGet 属性设置为 true 可能会对应用程序构成安全风险。 在GET请求中,消息由浏览器编码到URL中,因此更容易受到篡改。


10
如果你将以下内容添加到你的web.config文件中,这段代码就可以正常运行:<webServices> <protocols> <add name="HttpGet" /> <add name="HttpPost" /> </protocols> </webServices> - Anthony Shaw
8
添加 Web.config 是我所需要的,甚至不需要为方法添加修饰符。 - eidylon
我所需要做的就是添加 web.config 条目,然后它对我而言就能正常工作。 - Derreck Dean

10

ASMX Web服务使用SOAP。 SOAP请求仅使用POST调用方法。您需要在aspx页面中生成代理客户端来调用Web服务。如果您确实需要使用GET动词调用Web服务,则可能需要使用不同的方法,例如WCF REST


谢谢提供链接,但是那篇文章说WCF REST也默认使用POST和SOAP,不确定这算怎样的改进! - Alan Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接