programing

jQuery AJAX "401 (무허가)"를 사용한ASP.NET 호출 WebMethod

mbctv 2023. 3. 12. 11:10
반응형

jQuery AJAX "401 (무허가)"를 사용한ASP.NET 호출 WebMethod

몇 시간 동안이나 이걸 안고 있었어

{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}

ASP에서 이 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 무허가란 다음을 의미한다.

  • 사용자 인증이 제공되지 않았거나
  • 제공되었지만 인증 테스트에 실패했습니다.

이것은, 지금까지의 인증의 추가에 관한 설명과 일치하고 있습니다.또, 이 방법에 대해서도 명확하게 설명하고 있습니다.

따라서 이 메서드에 대한 액세스를 공개해야 합니까, 말아야 합니까?

공개:

  • 이 방식에서 인증을 삭제해야 합니다.

퍼블릭 자원(이 Web 방식 등)에의 액세스를 허가하려면 , 이것을 같은 디렉토리내의 설정 파일에 격납해 주세요.

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

위에 태그를 붙이면 모든 종류의 사용자에게 모든 리소스에 대한 액세스 권한을 부여합니다.그 대신 웹 서비스에 권한을 부여하기 위해 아래 태그를 추가할 수 있습니다.

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

개인:

  • 회선을 통해 인증이 전송되고 있는지(Fiddler를 사용하여 쿠키를 확인), 인증이 asp.net 인증을 통과하고 있는지 확인해야 합니다.

~/App_Start/RouteConfig.cs에서만 코멘트를 해야 합니다.

  // settings.AutoRedirectMode = RedirectMode.Permanent;

             (Or do this)

    settings.AutoRedirectMode = RedirectMode.Off;

Web.config 파일의 인증과는 관계가 없습니다.

전문가는 아니지만, 당신은 그것을 사용해본 적이 있나요?<allow users="*"/>구성 파일에 저장하시겠습니까?요청은 POST(작성에 사용)가 아닌 GET 방식을 사용해야 합니다.

편집: 클라이언트 측에서 호출할 수 없는 SOAP 메서드를 사용하고 있는 것 같습니다.RESFUL 서비스를 사용해야 합니다.

같은 문제를 해결하려다 이 질문을 발견했는데, 제가 해결한 방법이 여기에서는 보이지 않기 때문에 같은 병목현상에 빠진 사람에게 글을 올립니다.

사용하시는 방법으로 시험해 보세요.EnableSession = trueWebMethod 속성에서

맘에 들다

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

이것으로 401 오류를 해결할 수 있습니다.도움이 되길 바랍니다.

제 경우 폼 컨트롤에 WebMethod를 추가하고 있었습니다.페이지 자체에 추가해야 합니다.

저는 같은 문제에 직면했고 먼저 사용 가능한 해결책을 시도했고 효과가 있습니다. 만약 가 새로운 나는 깨달았다.web-service 이 코드에 해 주세요.App_Codeweb-service파일을 작성하면 오류가 발생하지 않습니다.

을 사용하다 폼 때 웹 폼 어플리케이션이 생성되고 웹 폼 어플리케이션은 .Authentication로로 합니다.No Authentication.

은, 「Default Authentication」(디폴트 인증)으로됩니다.Authentication: Individual User Account

는, 이 에러로 하지 않습니다.Authentication: No Authentication

ASP를 .해, NET 상에서 수을 시행착오를 했습니다..asmxcontentType: "application/x-www-form-urlencoded" ★★★★★★★★★★★★★★★★★」dataType: "xml"

Ajax를 들어 웹 설정에 이 .예를 들어, 「Ajax.asmx」라고 하는 URL은, 「Ajax.asmx」라고 하는 URL은 「URL」은 「Ajax.asmx」라고 하는 URL입니다."/qa/Handlers/AjaxLib.asmx/" 것 같아요."/Handlers/AjaxLib.asmx/"으로 동작합니다 ('PROD'는 PROD로 동작합니다).

  $.ajax({
  url: '/qa/Handlers/AjaxLib.asmx/' + action,
  type: "POST",
  async: false,
  data: data,
  contentType: "application/json; charset=utf-8",
  success: function () {

후, 가상 디렉토리 가 발생했습니다.({"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}).

스크립트에서 ASP를 사용하여 이 웹 서비스를 호출할 수 있습니다.넷 에이잭스다음 속성을 클래스에 추가합니다.

[System.Web.Script.Services.ScriptService]

저도 비슷한 문제에 직면했고 이 속성을 추가하면 해결되었습니다.

저는 JQuery Ajax 호출에 비활성 "data:" 매개 변수가 있었습니다.하지만 둘 중 하나보다는.파라미터 값에 대해 불평하는 NET 또는 JQuery에서 401 Unauthorized 오류가 발생했습니다(오해의 소지가 있다고 생각합니다).

언급URL : https://stackoverflow.com/questions/23033614/asp-net-calling-webmethod-with-jquery-ajax-401-unauthorized

반응형