WebMethod не вызывается при активной перезаписи URL

Я знаю, что есть похожие посты, но я не нашел помощи ни в одном из них.

Мои веб-методы работают, когда я не использую переписывание URL, но как только я включаю его, он перестает работать.

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-код моей страницы и не получаю сообщения "ОК". Я запустил отладчик и увидел, что когда я вызываю веб-метод, он вызывает Page_Load на моей странице, а не веб-метод.

Итак, я получил путь к corerct, но веб-метод не вызывается.

Я использую C#, jQuery, ASP.NET 3.5.

Любая помощь?

2 ответа

Решение

Вам нужно будет использовать полную ссылку на ваш веб-метод.

Если вы посмотрите в firebug, вы увидите, например:

http://localhost/test1/index.aspx/SaveSetting в качестве URL, который вы пытаетесь запросить, при условии, что / test1 перезаписывает в /index.aspx

Предполагая, что страница находится в корне вашего сайта, будет работать следующее:

url: /index.aspx/SaveSetting

(Кстати, с маршрутизацией URL это вообще не работает!)

Возможно, вместо этого переместите ваши веб-методы в файл asmx?

Если вы добавите это в свой JavaScript:

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

Тогда ваши стандартные вызовы webmethod должны работать:

PageMethods.SaveSetting(console.log);

Мой ответ был взят из этого вопроса, который был ранее задан.

Просто продолжение на случай, если кто-то еще наткнется на это. В файле web.config также требуется что-то, чтобы IIS понимал, как обрабатывать запрос веб-метода, а не только саму страницу:

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

Без этой строки у меня была та же самая проблема - сервер вернул бы всю веб-страницу FRONT, а не ответ от веб-метода.

В web.config могут быть и другие вещи, которые необходимы. Мой огромный (ха!), Так что кто знает, что еще может повлиять на эту проблему.

Другие вопросы по тегам