何時間もこれにこだわっています
{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}
ASP.Net WebformでこのWebMethodを呼び出そうとしています
[WebMethod]
public static string GetClients(string searchTerm, int pageIndex)
{
string query = "[GetClients_Pager]";
SqlCommand cmd = new SqlCommand(query);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SearchTerm", searchTerm);
cmd.Parameters.AddWithValue("@PageIndex", pageIndex);
cmd.Parameters.AddWithValue("@PageSize", PageSize);
cmd.Parameters.Add("@RecordCount", SqlDbType.Int, 4).Direction = ParameterDirection.Output;
return GetData(cmd, pageIndex).GetXml();
}
このjquery.ajaxから
function GetClients(pageIndex) {
$.ajax({
type: "POST",
url: "ConsultaPedidos.aspx/GetClients",
data: '{searchTerm: "' + SearchTerm() + '", pageIndex: ' + pageIndex + '}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function (response) {
alert(response.d);
},
error: function (response) {
alert(response.d);
}
});
}
しかし、私は常にこのエラーを受け取ります:
役職
http://localhost:64365/ConsultaPedidos.aspx/GetClients
401(無許可)
奇妙なことは、ユーザーの認証を開始するまでこれが機能していたことです
<system.web>
...
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" defaultUrl="/Dashboard" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
...
</system.web>
何か案は?
これは私を夢中にさせました。
内部〜/ App_Start/RouteConfig.cs変更:
settings.AutoRedirectMode = RedirectMode.Permanent;
に:
settings.AutoRedirectMode = RedirectMode.Off;
(または単に行をコメントしてください)
また、フレンドリーURLが有効になっている場合は、変更する必要があります
url: "ConsultaPedidos.aspx/GetClients",
に:
url: '<%= ResolveUrl("ConsultaPedidos.aspx/GetClients") %>',
これが他の誰かを助けることを願って
内部~/App_Start/RouteConfig.cs
変化する
settings.AutoRedirectMode = RedirectMode.Permanent;
に
settings.AutoRedirectMode = RedirectMode.Off;
401 Unauthorizedは次のことを意味します。
これは、認証の追加について述べたことと一致します。この方法も明らかにカバーしています。
したがって、このメソッドへのアクセスを公開するかどうかを選択しますか?
パブリック:
パブリックリソース(このwebmethodなど)へのアクセスを許可するには、これを同じディレクトリの設定ファイルに配置します。
<authorization>
<allow users="*" />
</authorization>
上記のタグを配置すると、すべての種類のユーザーにすべてのリソースへのアクセス権が付与されます。その代わりに、Webサービスに承認を与えるために以下のタグを追加できます
<location path="YourWebServiceName.asmx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
プライベート:
私は同じ問題を解決しようとするこの質問を見つけました、私が解決した方法はここにはありませんので、同じボトルネックに引っかかっている誰かに投稿します:
メソッドでWebMethod属性でEnableSession = true
を使用してみてください
好む
[WebMethod(EnableSession = true)]
public static string MyMethod()
{
return "no me rindo hdp";
}
これにより、401エラーが解決されます。お役に立てば幸いです。
専門家ではありませんが、<allow users="*"/>
構成ファイルに?リクエストでは、POST(作成に使用)ではなく、GETメソッドを使用する必要があります。
編集:SOAPメソッドを使用しているようです。このメソッドはクライアント側から呼び出すことはできません。RESFULサービスを使用する必要があります。
私の場合、フォーム上のコントロールにWebMethodを追加していました。ページ自体に追加する必要があります。
私は同じ問題に直面し、最初に利用可能な解決策を試しましたが、それは機能します。ただし、新しいweb-service
を作成し、App_Code
ファイルのweb-service
フォルダーに関連コードを追加すると、エラーは発生しません。
私の場合、問題はAjax.asmxを呼び出すURLにありました。このURLは、Webサーバーのセットアップ、たとえば"/qa/Handlers/AjaxLib.asmx/"
代わりに"/Handlers/AjaxLib.asmx/"
(私の特定の状況では、PRODサーバーで正常に動作します):
$.ajax({
url: '/qa/Handlers/AjaxLib.asmx/' + action,
type: "POST",
async: false,
data: data,
contentType: "application/json; charset=utf-8",
success: function () {
My AJAXは、my IIS仮想アプリケーションディレクトリ "qa"の範囲外で呼び出されたため、認証エラーが発生しました({"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}).
あなたの答えが受け入れられたことは知っています。実際には、Webフォームアプリケーションを作成し、Authentication
をNo Authentication
に変更しないときに発生します。
Authentication: Individual User Account
として表示されるデフォルトの認証
Authentication: No Authentication
に変更してもエラーは発生しません
私のサイトはASP.NETフォーム認証を使用していましたが、試行錯誤を繰り返した結果、.asmx
ページとcontentType: "application/x-www-form-urlencoded"
およびdataType: "xml"