ASP.NET Webmethod总是返回401错误

5

遇到 ASP.NET 权限混乱问题... 这一次,我无法使用 AJAX 调用任何类型的 WebMethod,否则我会得到以下错误:

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

代码:

<WebMethod(True)> _
    Public Function Login(ByVal usuario As String, ByVal senha As String) As Boolean
        [lots of validations]
        If (con.Connection.State = ConnectionState.Open) Then
            Return True
        Else
            Return False
        End If
    End Function

JQUERY调用:

$("#btnEnviar").click(function() {
            $('#login').hide();
            $('#ajaxLoader').fadeIn();
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "Login.aspx/Login",
                data: "{'usuario':'" + $('#txtUsuario').val() + "','senha':'" + $('#txtSenha').val() + "'}",
                dataType: "json",
                dataFilter: function(data) {
                    var msg = eval('(' + data + ')');
                    if (msg.hasOwnProperty('d'))
                        return msg.d;
                    else
                        return msg;
                },
                success: function(msg) {
                    if (msg.UsuarioValido == '1') {
                        top.location = "Home.aspx"
                    }
                    else {
                        $('#ajaxLoader').hide();
                        $('#login').fadeIn();
                    }
                }
        });

我知道成功的内容有一些错误,但现在不是问题所在。

当我尝试进行ajax调用时,Firebug控制台总是返回401未经授权的错误。

有人知道怎么解决吗?


你在 web config 中设置了什么身份验证? - redsquare
<authentication mode="Forms"> <forms name="Login" path="/" loginUrl="Login.aspx" protection="All" timeout="30" defaultUrl="Home.aspx"> </forms> </authentication> - ale
我假设你会向客户端发放认证密钥,在那里你有 [许多验证] 占位符? - redsquare
2个回答

12
  1. 如果在使用VB时出现错误500,请将Webmethod标记为Shared;如果在使用C#时出现此错误,请将其标记为Static。

  2. 关于错误401:如果正在使用表单身份验证,请通过在web.config文件中进行以下设置来允许匿名访问登录页面:

  3. <location path="Login.aspx">
      <system.web>
        <authorization>
          <allow users="*"/>
        </authorization>
      </system.web>
    </location>
    

我忘记了使用“static”关键字,结果得到了一个我不理解的401错误。谢谢。 - Dima Shivrin

1
这些步骤对我解决了问题。
1)在web.config中添加以下代码。
  <system.web>
   <authorization>
     <allow users="*"/>
   </authorization>
 </system.web>

2) 在~/App_Start/RouteConfig.cs中,更改如下:

从:settings.AutoRedirectMode = RedirectMode.Permanent;

到:settings.AutoRedirectMode = RedirectMode.Off;

3) 在ajax调用中,使用resolveurl方法,

从:'userForm.aspx/getAllUsers'

到:'<%= ResolveUrl("userForm.aspx/getAllUsers") %>'

因此,最终的jQuery代码如下:

  $.ajax({
    url: '<%= ResolveUrl("userForm.aspx/getAllUsers") %>',
    async: false,
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
      source.localdata = data.d;
    },
    error: function (err) {
      alert('Error: ' + err);
    }
  })

请参考以下链接获取更多信息。 https://forums.asp.net/t/1975897.aspx?jquery+ajax+calls+to+asp+net+web+methods+authentication+error+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接