Ответ 1
У меня была проблема в реальном файле .aspx, строка
<%@ Page Language="C#"
AutoEventWireup="true"
CodeBehind="xxx.xxx.cs" Inherits="xxx.xxx" %>
не было в коде. Как это изменилось? Я не знаю :(.
При исследовании этой проблемы большинство проблем SO касались метода static
как исправления.
Поскольку он не работает с реальным (и немного изощренным) WebMethod, я только что создал простой для проверки возможности достижения самого метода.
[WebMethod]
[ScriptMethod(UseHttpGet = false)]
public static string HelloWorld()
{
return "Hello World!";
}
Звонок.
<script>
$(document).ready(function () {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "usersWebMethods.aspx/HelloWorld",
dataType: "json",
success: function (data) {
alert(data.d);
}
});
});
</script>
Это всегда сводится к 500 (Internal Server Error)
Unknown web method HelloWorld.
Parameter name: methodName
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: Unknown web method HelloWorld.
Parameter name: methodName
Почему это не удается?
У меня была проблема в реальном файле .aspx, строка
<%@ Page Language="C#"
AutoEventWireup="true"
CodeBehind="xxx.xxx.cs" Inherits="xxx.xxx" %>
не было в коде. Как это изменилось? Я не знаю :(.
У меня тоже была эта проблема, но несколько иначе я использовал этот метод в файле .asmx и поэтому столкнулся с "статической" проблемой, но по-другому.
Если у вас есть метод как часть вашего класса, он должен быть static
.
Если вы поместили метод в файл .asmx для использования на нескольких страницах, он не должен быть static
.
Для меня основной проблемой было изменение javascript post
для передачи без аргументов, таких как
$http.post("Status.aspx/MyData", {})
Затем, чтобы убедиться, что ничего не было кэшировано, я удалил [System.Web.Services.WebMethod]
в код за файлом выше public static string MyData()
. Затем я построил проект с ошибкой, затем повторно добавил вышеупомянутый удаленный атрибут и был создан для успеха.
После запуска это сработало.
Отсутствие [WebMethod]
над вашей серверной функцией также приведет к этой ошибке.
Честно говоря, я только что "снова" осознал, насколько мы устали в некоторых случаях.
Для меня это был просто метод private
вместо метода public
.
В моем случае была проблема с URL-адресом, это было приложение веб-сайта Asp.Net:
Например:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "usersWebMethods.aspx/HelloWorld", <----- Here
dataType: "json",
success: function (data) {
alert(data.d);
}
});
Моя usersWebMethods.aspx
находится внутри папки UI
(Custom Created), поэтому, если я добавлю URL как usersWebMethods.aspx/HelloWorld
, он не будет работать, но когда я добавлю к нему ведущий /
, тогда будет правильно вызван метод ajax!
Изменено с:
usersWebMethods.aspx/HelloWorld
Для
/usersWebMethods.aspx/HelloWorld --