ASP.NET Webmethod总是返回401

时间:2010-07-05 23:21:47

标签: asp.net jquery vb.net ajax

厌倦了asp.net权限疯狂...... 这一次,我只是无法通过AJAX-CALL任何一种web方法或者我得到:

{"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 CALL:

$("#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 Unauthorized。

任何?

2 个答案:

答案 0 :(得分:10)

  1. Webmethod如果你收到ERROR 500,应该共享(vb)/ static(C#),将你的方法标记为共享/静态,你就完成了。

  2. 关于错误401:如果您正在使用表单身份验证,请记住允许匿名访问您的登录页面,方法是在您的web.config上执行此操作:

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

答案 1 :(得分:0)

这些步骤为我解决了这个问题。

1)在web.config中添加以下代码

  <system.web>
   <authorization>
     <allow users="*"/>
   </authorization>
 </system.web>

2)在〜/ App_Start / RouteConfig.cs中,进行如下更改

发件人:设置。AutoRedirectMode= RedirectMode.Permanent;

收件人:设置。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+