ASP.NET Calling WebMethod con jQuery AJAX “401 (no autorizado)”

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

  ...       ...  

¿Algunas ideas?

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

Dentro ~/App_Start/RouteConfig.cs cambio

 settings.AutoRedirectMode = RedirectMode.Permanent; 

a

 settings.AutoRedirectMode = RedirectMode.Off; 

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:

     

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

       

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.

No es un experto, pero ¿lo intentó poniendo 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.

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.

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

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"

En mi caso, estaba agregando el WebMethod a un control en el formulario. Necesita ser agregado a la página en sí.