与 jquery 对 webmethod 的调用一致地获得“401 Unauthorized”错误
Posted
技术标签:
【中文标题】与 jquery 对 webmethod 的调用一致地获得“401 Unauthorized”错误【英文标题】:Getting "401 Unauthorized" error consistently with jquery call to webmethod 【发布时间】:2011-01-18 20:44:33 【问题描述】:我一直在努力让我的 jquery 调用 web 方法工作。我被服务器以“401 Unauthorized”响应退回。我必须在 web.config 或其他地方有错误的设置,这会阻止成功调用。
感谢您的洞察力!
调用 js 函数调用 jquery 调用
button.OnClickAction = "PageMethod('TestWithParams', ['a', 'value', 'b', 2], 'AjaxSucceeded', 'AjaxFailed'); return false;";
调用 jquery 的 javascript 函数
function PageMethod(fn, paramArray, successFn, errorFn)
var pagePath = window.location.pathname;
var urlPath = pagePath + "/" + fn;
//Create list of parameters in the form:
//"paramName1":"paramValue1","paramName2":"paramValue2"
var paramList = '';
if (paramArray.length > 0)
for (var i = 0; i < paramArray.length; i += 2)
if (paramList.length > 0) paramList += ',';
paramList += '"' + paramArray[i] + '":"' + paramArray[i + 1] + '"';
paramList = '' + paramList + '';
//Call the page method
$.ajax(
type: "POST",
url: pagePath + "/" + fn,
contentType: "application/json; charset=utf-8",
data: paramList,
timeout: 10000,
dataType: "json",
success: function(result) alert('Overjoyed'); ,
error: function(result) alert('No joy');
);
页面中的Web方法
public partial class WebLayout : System.Web.UI.Page
[WebMethod()]
public static int TestNoParams()
return 1;
[WebMethod()]
public static string TestWithParams(string a, int b)
return a + b.ToString();
...
在 Firebug 控制台中看到的响应
json: "Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"
和
"NetworkError: 401 Unauthorized - http://localhost/Care-Provider-Home/Profile/Personal-Profile.aspx/TestWithParams" TestWithParams
我已经查看并阅读了有关该主题的常用网站(Encosia 等),但还是有用的。要么是我遗漏了一个关键部分,要么是我的环境的安全参数中有一些微妙之处阻止了调用。
以下是其他一些可能会影响您的诊断的可能有用的花絮:
代码隐藏中的 Web 方法 使用 Sitecore CMS(似乎没有干扰,永远不知道) IIS7 .NET 3.5 jQuery 1.3.2我期待您的见解和方向——谢谢!
【问题讨论】:
【参考方案1】:如果有的话,您使用的是什么形式的身份验证?首先想到的是确保您在 IIS 中的 webApp 设置为允许匿名用户(如果您确实希望以匿名用户身份进行调用)。此外,您在 web.config 中的身份验证模式未错误地设置为 Windows。如果您不能允许匿名用户并且正在使用表单身份验证,则用户必须先登录,然后才能从您的页面进行此调用。
如果上述设置正确,则尝试从服务器端定期调用服务,以确保无论调用服务的点如何,问题都是一致的。
如果问题未解决,请发布更多设置。希望这会有所帮助。
【讨论】:
我正在使用 Forms 身份验证,用户已登录,但如上所述,Sitecore 即时创建友好 URL 似乎是问题所在,现在外部有 ASPX Sitecore 处理,我收到内部服务器错误 - 因此需要更多诊断。【参考方案2】:来自 Firebug 控制台的 json 响应提供了最能说明问题的 IMO 线索。 System.InvalidOperationException(奇怪地依赖于 401 响应)表明还有更多的东西在起作用。
首先,谷歌搜索“InvalidOperationException webmethod jquery”返回的文章表明序列化问题可能引发此异常。为了排除这种情况,暂时将“data:paramList”更改为“data:''”。另外,附加一个调试器,看看异常是在方法执行之前还是在它完成并尝试序列化结果之后发生。
如果上述步骤未完成,您可能需要尝试重置为干净的 web.config 或阅读更多从“InvalidOperationException webmethod”搜索返回的结果
【讨论】:
我怀疑 Sitecore CMS 可能有问题(它拦截了请求),因为我构建了一个单一的 aspx 页面(代码隐藏、jquery 等中的 web 方法)——经过一些摆弄,它起作用了!在正确的轨道上,我再次使用 CMS 将此工作代码移动到我的项目中。我能够创建 Sitecore 无法处理的 CMS 页面(web.config 中的 IgnoreUrlPrefixes),所以现在我遇到了内部服务器错误 - 任何线索,因为此错误几乎没有提供查看位置的指示。【参考方案3】:是的,它确实开始工作了!由于 Sitecore CMS 确实执行 URL 重写以生成友好的 URL(它动态地组合页面,类似于母版页的概念),我想到它可能会导致最初导致 401 错误的一些问题。我通过使用单个 ASPX 创建一个单独的项目来验证这一点——通过一些工作,我能够调用 Web 方法并使用 jquery 获取值。然后我在我的 web 根目录中创建了几乎相同的 ASPX,但告诉 Sitecore 在向它发出请求时忽略它(web.config 中的 IgnoreUrlPrefixes),经过一些工作后,我也能够让它成功工作!感谢您的帮助。
【讨论】:
嗨 CareMatch - 我猜我遇到了与您上面描述的相同的问题。你能告诉我你到底做了什么来解决这个问题。 在 web.config 的 IgnoreUrlPrefixs 中添加了 ScriptResource.axd。 Hey CareMatch - 我遇到了同样的问题,请您提供一份您为使其正常工作所做的工作清单吗? 答案有点粗略,但它让我朝着正确的方向前进。以上是关于与 jquery 对 webmethod 的调用一致地获得“401 Unauthorized”错误的主要内容,如果未能解决你的问题,请参考以下文章
对 ASP.NET WebMethod 的 jQuery AJAX 调用
使用 jQuery 调用 ASP.NET PageMethod/WebMethod - 返回整个页面
JQuery ajax调用asp.net的webMethod