当url重写活动时,WebMethod不会被调用

时间:2012-05-08 13:45:59

标签: c# jquery ajax webmethod

我知道那里有类似的帖子,但我找不到任何帮助。

当我不使用网址重写时,我的网络方法有效,但是一旦打开它就停止工作。

的jQuery

        $.ajax({
            type: "POST",
            url: "index.aspx/SaveSetting",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                console.log(msg);
            }
        });

C#

    [WebMethod()]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public static string SaveSetting()
    {
        return "OK";
    }

当这个被调用时,我得到了我的页面的完整HTML,没有“OK”消息。 我运行调试器,看到当我调用web方法时,它会在我的页面中触发Page_Load而不是web方法。

所以我得到了corerct路径,但没有调用web方法。

我使用C#,jQuery,ASP.NET 3.5。

任何帮助?

3 个答案:

答案 0 :(得分:2)

您需要使用指向网络方法的完整链接。

如果你看看萤火虫,你会看到,例如:

http://localhost/test1/index.aspx/SaveSetting作为您尝试请求的网址,假设/ test1重写为/index.aspx

假设页面位于您网站的根目录下,以下内容将起作用:

url:/index.aspx/SaveSetting

(顺便说一句,这在url路由方面根本不起作用!)

或许将您的网络方法转换为asmx文件?

答案 1 :(得分:0)

如果您将其添加到您的javascript:

PageMethods.set_path("/whatever/the/actual/path/is/index.aspx");

然后你的标准webmethod调用应该有效:

PageMethods.SaveSetting(console.log);

我的回答取自先前提出的this问题。

答案 2 :(得分:0)

只是后续行动,以防其他任何人偶然发现。在web.config中还需要确保IIS理解如何处理Web方法的请求,而不是页面本身,这是必需的:

<httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>

如果没有这一行,我将遇到完全相同的问题-服务器将返回整个FRONT网页,而不是来自webmethod的响应。

web.config中可能还需要其他内容。我的真是太棒了(ha !!),所以谁知道还有什么可能影响这个问题。