web-dev-qa-db-ja.com

jQueryでWebMethodを呼び出すASP.NET AJAX "401(Unauthorized)"

何時間もこれにこだわっています

{"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/GetClients401(無許可)

奇妙なことは、ユーザーの認証を開始するまでこれが機能していたことです

<system.web>
...
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" defaultUrl="/Dashboard" />
    </authentication>
    <authorization>
      <deny users="?" />
    </authorization>
...
</system.web>

何か案は?

40
Daniel Cardenas

問題が解決しました

これは私を夢中にさせました。

内部〜/ App_Start/RouteConfig.cs変更:

settings.AutoRedirectMode = RedirectMode.Permanent;

に:

settings.AutoRedirectMode = RedirectMode.Off;

(または単に行をコメントしてください)

また、フレンドリーURLが有効になっている場合は、変更する必要があります

url: "ConsultaPedidos.aspx/GetClients",

に:

url: '<%= ResolveUrl("ConsultaPedidos.aspx/GetClients") %>',

これが他の誰かを助けることを願って

147
Daniel Cardenas

内部~/App_Start/RouteConfig.cs 変化する

settings.AutoRedirectMode = RedirectMode.Permanent;

settings.AutoRedirectMode = RedirectMode.Off;
11
user3913452

401 Unauthorizedは次のことを意味します。

  • ユーザー認証が提供されていませんまたは
  • 提供されましたが、認証テストに失敗しました

これは、認証の追加について述べたことと一致します。この方法も明らかにカバーしています。

したがって、このメソッドへのアクセスを公開するかどうかを選択しますか?

パブリック

  • この方法から認証を削除する必要があります。

パブリックリソース(このwebmethodなど)へのアクセスを許可するには、これを同じディレクトリの設定ファイルに配置します。

 <authorization>
        <allow users="*" /> 
 </authorization>

上記のタグを配置すると、すべての種類のユーザーにすべてのリソースへのアクセス権が付与されます。その代わりに、Webサービスに承認を与えるために以下のタグを追加できます

<location path="YourWebServiceName.asmx">
<system.web>
  <authorization>
    <allow users="*"/>
  </authorization>
</system.web>

プライベート

  • 認証が回線を介して送信されていることを確認する必要があり(Cookieを確認するために Fiddler を使用)、asp.net認証を通過していることを確認する必要があります。
5
m.edmondson

私は同じ問題を解決しようとするこの質問を見つけました、私が解決した方法はここにはありませんので、同じボトルネックに引っかかっている誰かに投稿します:

メソッドでWebMethod属性でEnableSession = trueを使用してみてください

好む

[WebMethod(EnableSession = true)]
public static string MyMethod()
{
    return "no me rindo hdp";
}

これにより、401エラーが解決されます。お役に立てば幸いです。

2
RokumDev

専門家ではありませんが、<allow users="*"/>構成ファイルに?リクエストでは、POST(作成に使用)ではなく、GETメソッドを使用する必要があります。

編集:SOAPメソッドを使用しているようです。このメソッドはクライアント側から呼び出すことはできません。RESFULサービスを使用する必要があります。

2
bobthedeveloper

私の場合、フォーム上のコントロールにWebMethodを追加していました。ページ自体に追加する必要があります。

1
Jeff Davis

私は同じ問題に直面し、最初に利用可能な解決策を試しましたが、それは機能します。ただし、新しいweb-serviceを作成し、App_Codeファイルのweb-serviceフォルダーに関連コードを追加すると、エラーは発生しません。

0
Izzy

私の場合、問題は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"}).

0
Honza P.

あなたの答えが受け入れられたことは知っています。実際には、Webフォームアプリケーションを作成し、AuthenticationNo Authenticationに変更しないときに発生します。

Authentication: Individual User Accountとして表示されるデフォルトの認証

Authentication: No Authenticationに変更してもエラーは発生しません

0

私のサイトはASP.NETフォーム認証を使用していましたが、試行錯誤を繰り返した結果、.asmxページとcontentType: "application/x-www-form-urlencoded"およびdataType: "xml"

0
Matthew Lock