Seit Stunden stecken geblieben
{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}
Ich versuche, diese 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);
}
});
}
Ich bekomme aber immer diesen Fehler:
POST
http://localhost:64365/ConsultaPedidos.aspx/GetClients
401 (Nicht autorisiert)
Merkwürdig ist, dass dies so lange funktionierte, bis ich mit der Authentifizierung von Benutzern begann
<system.web>
...
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" defaultUrl="/Dashboard" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
...
</system.web>
Irgendwelche Ideen?
Das hat mich verrückt gemacht.
Innerhalb von ~/App_Start/RouteConfig.cs change:
settings.AutoRedirectMode = RedirectMode.Permanent;
Zu:
settings.AutoRedirectMode = RedirectMode.Off;
(Oder kommentieren Sie einfach die Zeile)
Wenn benutzerfreundliche 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 Nicht autorisiert bedeutet, dass:
Dies stimmt mit dem überein, was Sie über das Hinzufügen der Authentifizierung gesagt haben, und deckt auch diese Methode eindeutig ab.
Möchten Sie, dass der Zugriff auf diese Methode öffentlich ist oder nicht?
Öffentlichkeit:
Um den Zugriff auf öffentliche Ressourcen (z. B. diese Webmethode) zu ermöglichen, platzieren Sie dies einfach in der Konfigurationsdatei im selben Verzeichnis:
<authorization>
<allow users="*" />
</authorization>
wenn Sie das Tag oben setzen, erhalten alle Benutzer Zugriff auf alle Ressourcen. Stattdessen können Sie unten ein Tag hinzufügen, um die Berechtigung für den Webservice zu erteilen
<location path="YourWebServiceName.asmx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
Privatgelände:
Kein Experte, aber Sie haben es versucht, indem Sie <allow users="*"/>
in die Konfigurationsdatei schreiben? Ihre Anfrage sollte eine GET-Methode und keine POST (zum Erstellen) verwenden.
BEARBEITEN: Es scheint, dass Sie eine SOAP - Methode verwenden, die nicht von Clientseite aus aufgerufen werden kann. Sie sollten einen RESFUL-Dienst verwenden.
Ich habe diese Frage gefunden, um das gleiche Problem zu lösen. Die Art und Weise, wie ich sie gelöst habe, ist hier nicht zu sehen. Ich poste sie an jemanden, der im selben Engpass steckt:
Versuchen Sie in Ihrer Methode den EnableSession = true
in Ihrem WebMethod-Attribut
mögen
[WebMethod(EnableSession = true)]
public static string MyMethod()
{
return "no me rindo hdp";
}
damit ist mein 401 fehler behoben. Hoffe hilfreich.
In meinem Fall fügte ich die WebMethod zu einem Steuerelement im Formular hinzu. Es muss der Seite selbst hinzugefügt werden.
Ich stand vor dem gleichen Problem und probierte zunächst die verfügbare Lösung aus, die funktioniert. Mir wurde jedoch klar, dass ich, wenn ich einen neuen web-service
erstelle und den relevanten Code im App_Code
-Ordner der web-service
-Datei hinzufüge, keine Fehler bekomme.
In meinem Fall lag das Problem in einer URL, die Ajax.asmx aufruft. Diese URL war gemäß einem Webserver-Setup nicht korrekt, z. "/qa/Handlers/AjaxLib.asmx/"
arbeitete für mich anstelle von "/Handlers/AjaxLib.asmx/"
(funktioniert auf PROD-Servern in meiner speziellen Situation gut):
$.ajax({
url: '/qa/Handlers/AjaxLib.asmx/' + action,
type: "POST",
async: false,
data: data,
contentType: "application/json; charset=utf-8",
success: function () {
Mein AJAX wurde dann außerhalb des Gültigkeitsbereichs meines virtuellen IIS Anwendungsverzeichnisses "qa" aufgerufen. Daher trat ein Autorisierungsfehler auf. ({"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}).
Ich weiß, dass Sie Ihre Antwort akzeptiert haben. Dies geschieht tatsächlich, wenn Sie eine Web Form-Anwendung erstellen und Authentication
nicht in No Authentication
ändern.
Die Standardauthentifizierung sehen wir als Authentication: Individual User Account
Der Fehler wird nicht angezeigt, wenn wir zu Authentication: No Authentication
wechseln.
Meine Website hat ASP.NET-Formularauthentifizierung verwendet und ich habe durch Ausprobieren herausgefunden, dass ich sie nur dann zum Laufen bringen kann, wenn ich eine Webmethode mit einer .asmx
-Seite und mit contentType: "application/x-www-form-urlencoded"
und dataType: "xml"