WebMethod在ASP.Net Web角色(Web窗体)中不起作用

WebMethod not working in ASP.Net Web Role (Web Forms)?

本文关键字:Web 窗体 不起作用 角色 ASP Net WebMethod      更新时间:2023-09-26

复制:

  • 打开VS2013,文件>新建"Azure云服务"项目>添加"ASP.NET Web角色"(命名为WebRole1)
  • 为Web角色选择"Web窗体"模板
  • 将jquery-1.11.1.min.js和一个新的WebForm1.aspx添加到WebRole1项目中
  • 将以下代码添加到WebForm1.aspx 的

    <script src="jquery-1.11.1.min.js"></script>
    <script>
    $(function() {
        $.ajax({
            type: "POST",
            url: "WebForm1.aspx/Foo",
            beforeSend: function (xhr) {
                xhr.setRequestHeader("Content-type",
                                     "application/json; charset=utf-8");
            },
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: "{a: 'webmethod!'}",
            success: function(data) {
                alert(data.d);
            },
            error: function() {
                alert("error");
            }
        });
    });
    

  • 将以下函数添加到WebForm1.aspx.cs 中的WebForm1类

    [WebMethod()]
    public static string Foo(string a)
    {
        return a;
    }
    
  • 将WebRole1项目设置为启动项目并运行。浏览器提醒"未定义"。

但您可以使用普通的ASP.NET WebForm项目获得"webmethod!"。怎么了?


我注意到在url: "WebForm1.aspx/Foo"中:如果更改aspx部分,ajax就会失败;如果将Foo部分更改为任何值,ajax总是成功的。这不寻常!在纯ASP.NET Web窗体应用程序中,更改任何一部分都将导致"错误"!


如果您创建EmptyASP.NET Web角色,ajax将成功!!!发生了什么事?

JavaScriptSerializer非常灵活,但可能值得在数据参数中尝试有效的JSON,如:

data: '{"a": "webmethod!"}'

我相信JSS会用单引号处理键/值,尽管这在技术上不是有效的JSON,但未加引号的a可能有点多。