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 могут быть и другие вещи, которые необходимы. Мой огромный (ха!), Так что кто знает, что еще может повлиять на эту проблему.