WebMethodへのjQueryコールと一貫して「401」エラーを取得する
-
21-09-2019 - |
質問
私はjQueryの電話をWebMethodに連れて行って仕事をするのに苦労してきました。 「401の不正な」応答でサーバーにバウンスされています。 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、et al)を見て読んでいますが、利用できます。重要な作品が欠けているか、環境のセキュリティパラメーターに微妙な微妙さがあり、呼び出しを妨げています。
診断に影響を与える可能性のある他の潜在的に有用な情報を以下に示します。
- CodeBehindのWebMethods
- Sitecore CMSを使用する(整然としていないようで、知らない)
- IIS7
- .NET 3.5
- jQuery 1.3.2
私はあなたの洞察と方向を楽しみにしています - ありがとう!
解決
はい、それは機能しました! Sitecore CMSはURL書き換えを実行してフレンドリーなURLを生成します(マスターページの概念と同様に、動的にページを組み立てます)。私はこれを単一のASPXを使用して個別のプロジェクトを作成することで検証しました。そして、いくつかの作業でWebメソッドを呼び出してjQueryを使用して値を取得することができました。次に、Webルートでほぼ同じASPXを作成しましたが、Sitecoreにリクエストが行われたときにそれを無視するように言いました(Web.ConfigのIngroreRlPrefixes)。ご協力いただきありがとうございます。
他のヒント
FireBugコンソールからのJSON応答は、最も重要な手がかりのIMOを提供します。 System.InvalidOperationException(401応答に不思議なことに乗ります)は、さらに何かが機能していることを示唆しています。
まず、「InvalidoperationException webmethod jquery」でグーグルでグーグルでグーグルで、シリアル化の問題がこの例外を投げることができることを示唆する記事を返します。これを除外するには、「データ:パラメーション」を「データ: '{}'」に一時的に変更します。さらに、デバッガーを添付して、メソッドが実行される前または完了後に例外が発生するかどうかを確認し、結果をシリアル化しようとします。
上記の手順が空になった場合は、クリーンなweb.configにリセットしてみるか、「invalidoperationexception webmethod」検索から戻ってきた結果をもっと読んでください。
どんな形態の認証を使用していますか?最初に思い浮かぶのは、IISのWebAppが匿名のユーザーを許可するように設定されていることを確認することです(実際に匿名のユーザーとして電話をかけたい場合)。また、web.configでの認証モードが誤ってWindowsに設定されていないこともあります。匿名のユーザーを許可できず、フォーム認証を使用している場合、この呼び出しがページから作成される前に、ユーザーをログインする必要があります。
上記が適切に設定されている場合は、サーバー側からサービスに定期的に電話をかけて、サービスの呼び出しポイントに関係なく問題が一貫していることを確認してください。
問題が解決されない場合は、より多くの設定を投稿してください。お役に立てれば。