Получение ошибки «401 Unauthorized» в соответствии с вызовом jquery к webmethod - PullRequest
8 голосов
/ 19 февраля 2010

Я изо всех сил пытался заставить мой jquery-вызов обратиться к веб-методу. Сервер получает ответ «401 Unauthorized». У меня должна быть неправильная настройка в файле web.config или где-то еще, что мешало бы успешному вызову.

Ваше понимание ценится!

вызов функции js вызывает вызов jquery

button.OnClickAction = "PageMethod('TestWithParams', ['a', 'value', 'b', 2], 'AjaxSucceeded', 'AjaxFailed'); return false;";

функция JavaScript, которая делает вызов jquery

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'); }
});
}

Веб-метод на странице

    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 и др.), Но безрезультатно. Либо я пропускаю критическую часть, либо в параметрах безопасности моей среды есть некоторые тонкости, препятствующие вызову.

Вот некоторые другие потенциально полезные моменты, которые могут повлиять на ваш диагноз:

  • Веб-методы в коде позади
  • Использование Sitecore CMS (похоже, не мешает, никогда не узнает)
  • IIS7
  • .NET 3.5
  • jQuery 1.3.2

Я с нетерпением жду ваших идей и указаний - спасибо!

Ответы [ 3 ]

6 голосов
/ 22 февраля 2010

Да, все заработало! Поскольку Sitecore CMS выполняет перезапись URL-адресов для создания удобных URL-адресов (она динамически собирает страницы по уровням, аналогично концепции главной страницы), мне пришло в голову, что это может вызывать некоторые проблемы, изначально вызвавшие ошибку 401. Я проверил это, создав отдельный проект с одним ASPX - и с некоторой работой я смог вызвать веб-методы и получить значения с помощью jquery. Затем я создал почти идентичный ASPX в своем веб-корне, но велел Sitecore игнорировать его при запросе к нему (IgnoreUrlPrefixes в web.config), после некоторой работы я смог также заставить его работать успешно! Спасибо за вашу помощь.

2 голосов
/ 19 февраля 2010

Ответ json от консоли Firebug предоставляет наиболее убедительную подсказку IMO.System.InvalidOperationException (который странным образом использует ответ 401) предлагает что-то еще в работе.

Во-первых, поиск в Google «InvalidOperationException webmethod jquery» возвращает статьи, в которых предлагается, что проблемы сериализации могут вызвать это исключение.Чтобы исключить это, временно измените «data: paramList» на «data: '{}'».Кроме того, присоедините отладчик и посмотрите, происходит ли исключение перед выполнением метода или после его завершения и попытки сериализации результата.

Если описанные выше шаги оказываются пустыми, вы можете попытаться выполнить сброс до чистойweb.config или ознакомьтесь с результатами, полученными в результате поиска "InvalidOperationException webmethod"

0 голосов
/ 19 февраля 2010

Какую форму аутентификации вы используете, если есть? Первое, что приходит на ум, - это убедиться, что ваше webApp в IIS настроено так, чтобы разрешать анонимным пользователям (если вы действительно хотите сделать вызов как анонимный пользователь). Также, что ваш режим аутентификации в web.config не установлен в Windows по ошибке. Если вы не можете разрешить анонимных пользователей и используете проверку подлинности с помощью форм, то пользователь должен будет войти в систему, прежде чем этот вызов будет сделан со страницы.

Если все вышеперечисленное установлено правильно, попробуйте сделать регулярный вызов в службу со стороны сервера, чтобы убедиться, что проблема не устранена независимо от точки вызова службы.

Опубликуйте больше настроек, если проблема не решена. Надеюсь, это поможет.

...