6

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

当我不使用 url 重写时,我的 web 方法可以工作,但是一旦我打开它就停止工作。

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。

有什么帮助吗?

4

3 回答 3

2

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

如果您查看萤火虫,您会看到,例如:

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

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

网址:/index.aspx/SaveSetting

(顺便说一句,这根本不适用于 url 路由!)

也许将您的网络方法移动到 asmx 文件中?

于 2012-05-08T15:31:55.057 回答
0

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

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

然后你的标准 webmethod 调用应该可以工作:

PageMethods.SaveSetting(console.log);

我的回答取自之前提出的这个问题。

于 2012-05-08T16:30:44.033 回答
0

只是一个后续行动,以防其他人偶然发现这一点。web.config 中还需要一些东西来确保 IIS 了解如何处理 webmethod 的请求,而不仅仅是页面本身:

<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 中可能还有其他需要的东西。我的是巨大的(哈!!)所以谁知道还有什么可能会影响这个问题。

于 2019-07-09T17:21:03.083 回答