c# - example - jquery y asp net
ASP.NET Calling WebMethod con jQuery AJAX "401(no autorizado)" (9)
Problema resuelto
Esto me estaba volviendo loco.
Dentro ~ / App_Start / RouteConfig.cs cambio:
settings.AutoRedirectMode = RedirectMode.Permanent;
A:
settings.AutoRedirectMode = RedirectMode.Off;
(O simplemente comente la línea)
Además, si las URL amigables están habilitadas, debe cambiar
url: "ConsultaPedidos.aspx/GetClients",
A:
url: ''<%= ResolveUrl("ConsultaPedidos.aspx/GetClients") %>'',
Espero que esto ayude a alguien más
Estuve atascado con esto por horas
{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}
Intento llamar a este WebMethod en mi formulario web ASP.Net
[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();
}
De este 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);
}
});
}
Pero siempre obtengo este error:
POST
http://localhost:64365/ConsultaPedidos.aspx/GetClients
401 (no autorizado)
Lo extraño es que esto solía funcionar hasta que empiezo a autenticar usuarios
<system.web>
...
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" defaultUrl="/Dashboard" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
...
</system.web>
¿Algunas ideas?
401 no autorizado significa que:
- La autenticación de usuario no se ha proporcionado o
- Se proporcionó pero fallaron pruebas de autenticación
Esto corrobora con lo que ha dicho sobre la adición de autenticación, claramente está cubriendo este método también.
Por lo tanto, ¿quieres que el acceso a este método sea público o no?
Público :
- Debe eliminar la autenticación de este método.
Para permitir el acceso a recursos públicos (como este método web), simplemente coloca esto en el archivo de configuración en el mismo directorio:
<authorization>
<allow users="*" />
</authorization>
si coloca la etiqueta anterior, dará acceso a todo tipo de usuarios a todos los recursos. entonces, en lugar de eso, puede agregar la etiqueta siguiente para otorgar autorización al servicio web
<location path="YourWebServiceName.asmx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
Privado :
- Debe asegurarse de que la autenticación se envía a través de la línea (utilizando Fiddler para verificar la cookie) y asegurarse de que esté pasando la autenticación asp.net.
Dentro ~/App_Start/RouteConfig.cs
cambio
settings.AutoRedirectMode = RedirectMode.Permanent;
a
settings.AutoRedirectMode = RedirectMode.Off;
En mi caso, estaba agregando el WebMethod a un control en el formulario. Necesita ser agregado a la página en sí.
Encontré esta pregunta tratando de resolver el mismo problema, la forma en que lo resolví no se ve aquí, así que se lo publico a alguien atrapado en el mismo cuello de botella:
Pruebe en su método use EnableSession = true
en su atributo WebMethod
me gusta
[WebMethod(EnableSession = true)]
public static string MyMethod()
{
return "no me rindo hdp";
}
con esto se resuelve mi error 401. Espero ser útil.
Enfrenté el mismo problema y primero probé la solución que está disponible y funciona. Sin embargo, me di cuenta de que si creo un nuevo web-service
y agrego el código relevante en la carpeta App_Code
archivo del web-service
, no obtengo ningún error.
Mi sitio usaba autenticación de formularios ASP.NET y resolví por prueba y error que solo podía hacerlo funcionar si llamaba a un método web en una página .asmx
y con contentType: "application/x-www-form-urlencoded"
y dataType: "xml"
No es un experto, pero ¿lo intentó poniendo <allow users="*"/>
en el archivo de configuración? Su solicitud debe usar un método GET y no un POST (utilizado para crear).
EDITAR: Parece que está utilizando un método SOAP, que no se puede llamar desde el lado del cliente, debe usar un servicio RESFUL.
Sé que aceptaste tu respuesta. En realidad sucede cuando se crea una aplicación Web Form y no se cambia la Authentication
a No Authentication
.
La autenticación predeterminada que vemos como Authentication: Individual User Account
El error no vendrá si cambiamos a Authentication: No Authentication