【问题标题】:Possible to invoke ASMX service with parameter via url query string?可以通过 url 查询字符串使用参数调用 ASMX 服务吗?
【发布时间】:2010-01-05 15:06:19
【问题描述】:

我有一个带有单个 int 参数的 asmx 服务。我可以打开服务的 URL 并查看服务描述屏幕。从这里我可以将查询参数输入到表单中并调用 Web 服务。

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

这不起作用:

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

有什么想法吗?由于一些部署问题,我真的希望能够从标准链接执行此操作。我是否必须将请求包装在普通的 aspx 页面中?

【问题讨论】:

    标签: asmx


    【解决方案1】:

    您可以装饰您的方法以允许 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 documentation for UseHttpGet

    UseHttpGet 属性设置为 true 可能会带来安全风险 如果你在工作,你的申请 敏感数据或交易。 在 GET 请求中,消息是 由浏览器编码成 URL 因此是一个更容易的目标 篡改。

    【讨论】:

    • 太好了,我试试看。
    • 如果您将以下内容添加到您的 web.config
    • 我只需要添加网络配置。甚至不需要装饰方法。
    • 我所要做的就是添加 web.config 条目,它对我有用。
    【解决方案2】:

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

    【讨论】:

    • 感谢您的链接,但那篇文章说 WCF REST 也默认为 POST 和 SOAP,不确定这是如何改进的!
    猜你喜欢
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2011-08-28
    • 2012-08-26
    相关资源
    最近更新 更多