Asp.net

與 jquery 對 webmethod 的呼叫一致地得到“401 Unauthorized”錯誤

  • February 22, 2010

我一直在努力讓我的 jquery 呼叫 webmethod 工作。我被伺服器以“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

我期待您的見解和方向-謝謝!

是的,它確實開始工作了!由於 Sitecore CMS 確實執行 URL 重寫以生成友好的 URL(它動態地組裝頁面,類似於母版頁的概念),我想到它可能會導致一些問題,最初導致 401 錯誤。我通過使用單個 ASPX 創建一個單獨的項目來驗證這一點——通過一些工作,我能夠呼叫 Web 方法並使用 jquery 獲取值。然後我在我的 web 根目錄中創建了幾乎相同的 ASPX,但告訴 Sitecore 在向它發出請求時忽略它(web.config 中的 IgnoreUrlPrefixes),經過一些工作後,我也能夠讓它成功工作!謝謝你的幫助。

引用自:https://stackoverflow.com/questions/2297856