Hier ben je al uren mee bezig
{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}
Ik probeer deze WebMethod aan te roepen in mijn ASP.Net-webformulier
[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();
}
Van deze 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);
}
});
}
Maar ik krijg altijd deze foutmelding:
POST
http://localhost:64365/ConsultaPedidos.aspx/GetClients
401
(Ongeautoriseerd)
Vreemd is dat dit werkte totdat ik gebruikers begon te authenticeren
<system.web>
...
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" defaultUrl="/Dashboard" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
...
</system.web>
Enig idee?
Antwoord 1, autoriteit 100%
Probleem opgelost
Ik werd er gek van.
Binnen ~/App_Start/RouteConfig.csverandering:
settings.AutoRedirectMode = RedirectMode.Permanent;
Aan:
settings.AutoRedirectMode = RedirectMode.Off;
(Of becommentarieer de regel)
Ook als gebruiksvriendelijke URL’s zijn ingeschakeld, moet u dit wijzigen
url: "ConsultaPedidos.aspx/GetClients",
Aan:
url: '<%= ResolveUrl("ConsultaPedidos.aspx/GetClients") %>',
Ik hoop dat dit iemand anders helpt
Antwoord 2, autoriteit 10%
Binnen ~/App_Start/RouteConfig.cs
verandering
settings.AutoRedirectMode = RedirectMode.Permanent;
naar
settings.AutoRedirectMode = RedirectMode.Off;
Antwoord 3, autoriteit 3%
401 Ongeautoriseerd betekent dat:
- Gebruikersauthenticatie is niet verstrekt of
- Het is verstrekt maar mislukte authenticatietests
Dit komt overeen met wat je hebt gezegd over het toevoegen van authenticatie, het gaat duidelijk ook over deze methode.
Wilt u daarom dat de toegang tot deze methode openbaar is of niet?
Openbaar:
- Je moet authenticatie van deze methode verwijderen.
Om toegang tot openbare bronnen (zoals deze webmethode) toe te staan, plaats je dit eenvoudig in het configuratiebestand in dezelfde map:
<authorization>
<allow users="*" />
</authorization>
Als u een tag boven plaatst, geeft het alle soorten gebruikers toegang tot alle bronnen. dus in plaats daarvan kun je onderstaande tag toevoegen om autorisatie te geven aan de webservice
<location path="YourWebServiceName.asmx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
Privé:
- U moet ervoor zorgen dat authenticatie over de lijn wordt verzonden (met behulp van Fiddlerom te controleren op de cookie) , en zorg ervoor dat het de asp.net-authenticatie doorstaat.
Antwoord 4, autoriteit 2%
Je hoeft alleen commentaar te geven in ~/App_Start/RouteConfig.cs
// settings.AutoRedirectMode = RedirectMode.Permanent;
(Or do this)
settings.AutoRedirectMode = RedirectMode.Off;
Er is niets te maken met verificatie in het bestand Web.config.
Antwoord 5
Geen expert, maar heb je het geprobeerd door <allow users="*"/>
in het configuratiebestand te plaatsen?
Uw verzoek moet een GET-methode gebruiken en geen POST (gebruikt om te maken).
EDIT: het lijkt erop dat je een SOAP-methode gebruikt, die niet vanaf de client kan worden aangeroepen, je moet een RESFUL-service gebruiken.
Antwoord 6
Ik vond deze vraag om hetzelfde probleem op te lossen, de manier waarop ik het heb opgelost, wordt hier niet weergegeven, dus plaats ik een bericht naar iemand die in hetzelfde knelpunt zit:
Probeer in uw methode de EnableSession = true
te gebruiken in uw WebMethod-kenmerk
vind ik leuk
[WebMethod(EnableSession = true)]
public static string MyMethod()
{
return "no me rindo hdp";
}
Hiermee is mijn 401-fout opgelost. Hoop behulpzaam te zijn.
Antwoord 7
In mijn geval was ik de WebMethod aan het toevoegen aan een besturingselement op het formulier. Het moet aan de pagina zelf worden toegevoegd.
Antwoord 8
Ik had hetzelfde probleem en probeerde eerst de beschikbare oplossing en het werkt. Ik realiseerde me echter dat als ik een nieuwe web-service
maak en de relevante code toevoeg in de map App_Code
van het bestand web-service
, ik dat niet doe krijg geen fouten.
Antwoord 9
Ik weet dat je antwoord geaccepteerd is. Het gebeurt eigenlijk tijdens het maken van een webformuliertoepassing en het niet wijzigen van de Authentication
in No Authentication
.
De standaard authenticatie die we zien als Authentication: Individual User Account
De fout treedt niet op als we veranderen naar Authentication: No Authentication
Antwoord 10
Mijn site gebruikte ASP.NET-formulierauthenticatie en ik kwam er met vallen en opstaan uit dat ik het alleen kon laten werken als ik een webmethode aanriep met op een .asmx
-pagina en met contentType: "application/x-www-form-urlencoded"
en dataType: "xml"
Antwoord 11
In mijn geval zat het probleem in de URL die Ajax.asmx aanroept. Deze URL was niet correct volgens een webserverconfiguratie, b.v. "/qa/Handlers/AjaxLib.asmx/"
werkte voor mij in plaats van "/Handlers/AjaxLib.asmx/"
(werkt prima op PROD-servers in mijn specifieke situatie) :
$.ajax({
url: '/qa/Handlers/AjaxLib.asmx/' + action,
type: "POST",
async: false,
data: data,
contentType: "application/json; charset=utf-8",
success: function () {
Mijn AJAX werd vervolgens aangeroepen buiten het bereik van mijn IIS virtuele applicatiemap “qa”, vandaar dat er een autorisatiefout is opgetreden ({"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}).
Antwoord 12
Om deze webservice te laten aanroepen vanuit een script, met behulp van ASP.NET AJAX. Voeg het volgende kenmerk toe aan de klas
[System.Web.Script.Services.ScriptService]
Ik had een soortgelijk probleem en het toevoegen van dit kenmerk loste het op.
Antwoord 13
Voor mij had ik een ongeldige parameter “data:” in mijn JQuery Ajax-aanroep. Maar in plaats van .NET of JQuery te klagen over de parameterwaarden, kreeg ik (misleidend naar mijn mening) de 401 Unauthorized-fout.