Dans la recherche de ce problème, la plupart des problèmes de SO concernaient la méthode static
en tant que correctif.
Puisqu'il ne fonctionne pas avec le WebMethod réel (et un peu sophistiqué), je viens d'en créer un simple pour vérifier s'il est possible d'atteindre la méthode elle-même.
[WebMethod]
[ScriptMethod(UseHttpGet = false)]
public static string HelloWorld()
{
return "Hello World!";
}
L'appel.
<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>
Cela revient toujours à 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
Pourquoi cela échoue-t-il?
J'ai rencontré un problème dans le fichier .aspx, la ligne
<%@ Page Language="C#"
AutoEventWireup="true"
CodeBehind="xxx.xxx.cs" Inherits="xxx.xxx" %>
n'était pas présent dans le code. Comment cela a-t-il changé? Je ne sais pas :(.
J'ai également eu ce problème, mais légèrement différemment, j'avais cette méthode dans un fichier .asmx et j'ai donc rencontré le problème "statique", mais d'une manière différente.
Si vous avez une méthode dans le cadre de votre classe Page, elle doit être static
.
Si vous avez mis une méthode dans un fichier .asmx à utiliser sur plusieurs pages, elle ne doit pas être static
.
Manque le [WebMethod]
au-dessus de votre fonction côté serveur provoquera également cette erreur.
Pour moi, le principal problème était de changer javascript post
pour ne passer aucun argument tel que
$http.post("Status.aspx/MyData", {})
Ensuite, pour vérifier que rien n'a été mis en cache, j'ai ensuite supprimé [System.Web.Services.WebMethod]
Dans le code derrière le fichier au-dessus de public static string MyData()
. Ensuite, j'ai construit le projet à l'échec, puis j'ai rajouté l'attribut supprimé susmentionné et construit avec succès.
Lors de l'exécution, cela a fonctionné.
Pour être honnête, je viens de réaliser "encore" à quel point nous pouvions être fatigués dans certains cas.
Pour moi, c'était juste une méthode private
au lieu d'une public
.