jQuery Ajax Web API 调用 returns 仅在 IIS 中设置 Windows 身份验证时出现 401 未授权错误
jQuery Ajax Web API call returns 401 unauthorized error when set only Windows authentication in IIS
我们的 Web API 托管在 IIS 中,仅 Windows 身份验证。我们从我们的 Angular 项目中调用 API,它工作正常。
现在我们正在创建一个 jQuery Ajax 方法来调用那个 API 方法(它有一个 AllowAnonymous
注释)。
这是我的 jQuery 代码:
var settings = {
"crossDomain": true,
"url": URL,
"contentType": "application/json; charset=utf-8",
"dataType": "json",
"data" : JSON.stringify(Model); // model contains json object.
"method": "POST"
}
$.ajax(settings).done(function (response) { console.log(response);});
我几乎尝试了以下所有可能的解决方案:
在Ajax调用中设置CrossDomain : true
将 header 与接受类型和 Allow_origin_method
设置为 *
cache : true
在 IIS 中设置 NTLM 并在 Windows 身份验证提供者中协商
在IIS端口给用户完全权限权限
要重现该问题,我们可以创建一个简单的 Web API 和 jQuery 来调用 API 的方法之一。将两者都托管在不同端口的 IIS 上,并为 Web API
设置 Windows 身份验证
尝试在 AJAX 调用中设置 withCredentials: true
。它会将身份验证详细信息传递给 API。
$.ajax({
type: 'GET',
url: Url,
xhrFields: {
withCredentials: true
},
success: function (data, textStatus, jqXHR) {
console.log(data);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
alert('A problem occurred while trying to load data from ' + Url);
},
complete: function (jqXHR, textStatus) {
if (textStatus == 'error') {
console.log(jqXHR.responseText);
}
}
});
设置 withCredentials 对同站点请求没有影响。
有关此内容的更多信息属性、XMLHttpRequest - WithCredentials
尝试将 url 的 ajax 代码更改为 url: '@Url.Action("Action", "Controller")'
这解决了我在将应用程序发布到 IIS 时显示登录弹出窗口并导致 401.2 错误的问题。
我们的 Web API 托管在 IIS 中,仅 Windows 身份验证。我们从我们的 Angular 项目中调用 API,它工作正常。
现在我们正在创建一个 jQuery Ajax 方法来调用那个 API 方法(它有一个 AllowAnonymous
注释)。
这是我的 jQuery 代码:
var settings = {
"crossDomain": true,
"url": URL,
"contentType": "application/json; charset=utf-8",
"dataType": "json",
"data" : JSON.stringify(Model); // model contains json object.
"method": "POST"
}
$.ajax(settings).done(function (response) { console.log(response);});
我几乎尝试了以下所有可能的解决方案:
在Ajax调用中设置
CrossDomain : true
将 header 与接受类型和
Allow_origin_method
设置为*
cache : true
在 IIS 中设置 NTLM 并在 Windows 身份验证提供者中协商
在IIS端口给用户完全权限权限
要重现该问题,我们可以创建一个简单的 Web API 和 jQuery 来调用 API 的方法之一。将两者都托管在不同端口的 IIS 上,并为 Web API
设置 Windows 身份验证尝试在 AJAX 调用中设置 withCredentials: true
。它会将身份验证详细信息传递给 API。
$.ajax({
type: 'GET',
url: Url,
xhrFields: {
withCredentials: true
},
success: function (data, textStatus, jqXHR) {
console.log(data);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
alert('A problem occurred while trying to load data from ' + Url);
},
complete: function (jqXHR, textStatus) {
if (textStatus == 'error') {
console.log(jqXHR.responseText);
}
}
});
设置 withCredentials 对同站点请求没有影响。
有关此内容的更多信息属性、XMLHttpRequest - WithCredentials
尝试将 url 的 ajax 代码更改为 url: '@Url.Action("Action", "Controller")'
这解决了我在将应用程序发布到 IIS 时显示登录弹出窗口并导致 401.2 错误的问题。