ASP.NET ruft WebMethod mit jQuery AJAX “401 (nicht autorisiert)” auf

Seit Stunden damit beschäftigt

{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"} 

Ich versuche dieses WebMethod in meinem ASP.Net Webformular aufzurufen

 [WebMethod] public static string GetClients(string searchTerm, int pageIndex) { string query = "[GetClients_Pager]"; SqlCommand cmd = new SqlCommand(query); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@SearchTerm", searchTerm); cmd.Parameters.AddWithValue("@PageIndex", pageIndex); cmd.Parameters.AddWithValue("@PageSize", PageSize); cmd.Parameters.Add("@RecordCount", SqlDbType.Int, 4).Direction = ParameterDirection.Output; return GetData(cmd, pageIndex).GetXml(); } 

Von diesem jquery.ajax

 function GetClients(pageIndex) { $.ajax({ type: "POST", url: "ConsultaPedidos.aspx/GetClients", data: '{searchTerm: "' + SearchTerm() + '", pageIndex: ' + pageIndex + '}', contentType: "application/json; charset=utf-8", dataType: "json", success: OnSuccess, failure: function (response) { alert(response.d); }, error: function (response) { alert(response.d); } }); } 

Aber ich bekomme immer diesen Fehler:

POST http://localhost:64365/ConsultaPedidos.aspx/GetClients 401 (nicht autorisiert)

Merkwürdige Sache ist, dass dies funktioniert, bis ich anfange, Benutzer zu authentifizieren

  ...       ...  

Irgendwelche Ideen?

    Problem getriggers

    Das hat mich verrückt gemacht.

    Innerhalb von ~ / App_Start / RouteConfig.cs ändern:

     settings.AutoRedirectMode = RedirectMode.Permanent; 

    Zu:

     settings.AutoRedirectMode = RedirectMode.Off; 

    (Oder einfach die Zeile kommentieren)

    Auch wenn freundliche URLs aktiviert sind, müssen Sie ändern

     url: "ConsultaPedidos.aspx/GetClients", 

    Zu:

     url: '< %= ResolveUrl("ConsultaPedidos.aspx/GetClients") %>', 

    Hoffe, das hilft jemand anderem

    Innerhalb ~/App_Start/RouteConfig.cs ändern

     settings.AutoRedirectMode = RedirectMode.Permanent; 

    zu

     settings.AutoRedirectMode = RedirectMode.Off; 

    401 Unautorisiert bedeutet, dass:

    • Die Benutzerauthentifizierung wurde nicht bereitgestellt oder
    • Es wurde bereitgestellt, fehlgeschlagene Authentifizierungstests jedoch

    Dies bestätigt das, was Sie über das Hinzufügen von Authentifizierung gesagt haben, es deckt diese Methode ebenfalls klar ab.

    Möchtest du, dass der Zugang zu dieser Methode öffentlich ist oder nicht?

    Öffentlich :

    • Sie müssen die Authentifizierung von dieser Methode entfernen.

    Um den Zugriff auf öffentliche Ressourcen (wie diese Webmethode) zu ermöglichen, legen Sie diese einfach in die Konfigurationsdatei im selben Verzeichnis:

         

    Wenn Sie über Tag setzen, wird es allen Benutzern Zugriff auf alle Ressourcen gewähren. Stattdessen können Sie unterhalb des Tags hinzufügen, um dem Webdienst eine Autorisierung zu erteilen

           

    Privat :

    • Sie müssen sicherstellen, dass die Authentifizierung über die Leitung gesendet wird (mithilfe von Fiddler , um nach dem Cookie zu suchen) und sicherstellen, dass die asp.net-Authentifizierung übergeben wird.

    Kein Experte, aber hast du es versucht, indem du in die Konfigurationsdatei legst? Ihre Anfrage sollte eine GET-Methode und keinen POST (zum Erstellen) verwenden.

    EDIT: Es scheint, dass Sie eine SOAP-Methode verwenden, die nicht von Clients aufgerufen werden kann, sollten Sie einen RESUL-Dienst verwenden.

    Ich habe diese Frage gefunden, die versucht, das gleiche Problem zu lösen, die Art, wie ich getriggers habe, ist hier nicht zu sehen, also poste ich jemanden, der im selben Engpass steckt:

    Versuchen Sie in Ihrer Methode, EnableSession = true in Ihrem WebMethod-Attribut zu verwenden

    mögen

     [WebMethod(EnableSession = true)] public static string MyMethod() { return "no me rindo hdp"; } 

    damit ist mein 401 Fehler behoben. Hoffe, dass es hilfreich ist.

    Ich hatte das gleiche Problem und probierte zuerst die verfügbare Lösung aus und es funktioniert. Allerdings habe ich festgestellt, wenn ich einen neuen web-service erstellen und den relevanten Code im App_Code Ordner der web-service Datei hinzufügen, dann bekomme ich keine Fehler.

    Ich weiß, du hast deine Antwort akzeptiert. Es passiert tatsächlich beim Erstellen einer Web Form-Anwendung und ändert nicht die Authentication auf No Authentication .

    Die Standardauthentifizierung sehen wir als Authentication: Individual User Account

    Der Fehler tritt nicht auf, wenn wir zu Authentication: No Authentication wechseln

    Meine Website verwendete die ASP.NET-Formularauthentifizierung und ich ermittelte durch Versuch und Irrtum, dass ich es nur funktionieren konnte, wenn ich eine .asmx mit einer .asmx Seite und mit .asmx contentType: "application/x-www-form-urlencoded" und dataType: "xml"

    In meinem Fall habe ich den WebMethod zu einem Steuerelement in dem Formular hinzugefügt. Es muss der Seite selbst hinzugefügt werden.