Dan*_*nas 44 c# asp.net ajax jquery webmethod
被困这几个小时了
{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}
Run Code Online (Sandbox Code Playgroud)
我试图在我的ASP.Net Webform中调用这个WebMethod
[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();
}
Run Code Online (Sandbox Code Playgroud)
从这个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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
但我总是得到这个错误:
POST
http://localhost:64365/ConsultaPedidos.aspx/GetClients
401(未经授权)
奇怪的是,这开始工作直到我开始验证用户
<system.web>
...
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" defaultUrl="/Dashboard" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
...
</system.web>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Dan*_*nas 152
这让我发疯了.
里面〜/ App_Start/RouteConfig.cs改变:
settings.AutoRedirectMode = RedirectMode.Permanent;
Run Code Online (Sandbox Code Playgroud)
至:
settings.AutoRedirectMode = RedirectMode.Off;
Run Code Online (Sandbox Code Playgroud)
(或者只是评论一下)
此外,如果启用友好URL,则需要更改
url: "ConsultaPedidos.aspx/GetClients",
Run Code Online (Sandbox Code Playgroud)
至:
url: '<%= ResolveUrl("ConsultaPedidos.aspx/GetClients") %>',
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他人
小智 11
内部~/App_Start/RouteConfig.cs
变化
settings.AutoRedirectMode = RedirectMode.Permanent;
Run Code Online (Sandbox Code Playgroud)
至
settings.AutoRedirectMode = RedirectMode.Off;
Run Code Online (Sandbox Code Playgroud)
401 Unauthorized意味着:
这证实了你所说的关于添加身份验证的内容,它显然也涵盖了这种方法.
因此,您是否希望访问此方法是否公开?
公众:
要允许访问公共资源(例如此webmethod),只需将其放在同一目录中的配置文件中:
<authorization>
<allow users="*" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
如果您将上面的标记放在上面,那么它将为所有资源提供对所有类型用户的访问权限.因此,您可以添加以下标记来授予Web服务授权
<location path="YourWebServiceName.asmx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)
私人:
您只需在 ~/App_Start/RouteConfig.cs 中注释掉即可
// settings.AutoRedirectMode = RedirectMode.Permanent;
(Or do this)
settings.AutoRedirectMode = RedirectMode.Off;
Run Code Online (Sandbox Code Playgroud)
Web.config 文件中与身份验证无关。
归档时间: |
|
查看次数: |
63767 次 |
最近记录: |