【问题标题】:WebMethod not called when url rewrite activeurl 重写活动时未调用 WebMethod
【发布时间】:2012-05-08 13:45:59
【问题描述】:

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

当我不使用 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。

有什么帮助吗?

【问题讨论】:

  • 好的,发现重写规则搞砸了。所以猜猜最好的方法是使用 ScottE 建议的 *.asmx 文件,至少可以。
  • 我知道这是很老的帖子了。我只是想知道您是否找到了 url 重写和 webmethod 的任何解决方案? .asmx 与 url rewrite 完美配合,但这对我的项目没有帮助。在我的项目中,需要使用 url rewrite 运行 Webmethod。

标签: c# jquery ajax webmethod


【解决方案1】:

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

如果你查看 firebug,你会看到,例如:

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

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

网址:/index.aspx/SaveSetting

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

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

【讨论】:

  • 谢谢,所以你基本上是说 WebMethods 不能与 url 重写一起工作?
  • 只要路径正确,它们就可以正常工作。如果你使用 asmx web 服务而不是代码隐藏 web 方法,或者你的 aspx 页面的拉路径,你应该没问题。
  • 我使用了 firebug,并且获得了完整路径 ´/website/admin/settings/index.aspx/SaveSetting´ 但是当我尝试在浏览器中打开此链接时,我得到了通常的索引。 aspx 不是网络方法。这不像我得到 404,我确实从 ajax 调用返回的页面中获取了完整的 HTML,但我应该只得到“OK”。
  • 已解决,解决办法是改用asmx文件。
【解决方案2】:

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

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

那么你的标准 webmethod 调用应该可以工作了:

PageMethods.SaveSetting(console.log);

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

【讨论】:

  • 我试过这个,但没有帮助。我的路径是正确的,我确实从 ajax 调用中获取了页面的完整 HTML。但问题是没有调用web方法,只有page_load。顺便说一句,它是 PageMethods.set_path 而不是 PageMethods.set_page :)
  • 我想它只是在做你已经用 jQuery 尝试过的事情,所以它不起作用。我的建议很愚蠢,我很抱歉。
【解决方案3】:

只是一个后续行动,以防其他人偶然发现这一点。 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 中可能还有其他需要的东西。我的是巨大的(哈!!)所以谁知道还有什么可能会影响这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多