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/GetClients401 (무허가)
이상한 점은 사용자 인증을 시작할 때까지 이 기능이 작동한다는 것입니다.
<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_Code의 web-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
'programing' 카테고리의 다른 글
| Oracle에서 예약어를 피하려면 어떻게 해야 합니까? (0) | 2023.03.12 |
|---|---|
| AJAX 콜에서 어레이를 반환하는 방법 (0) | 2023.03.12 |
| Gulp AssertionError [ERR_ASSERTION]: 작업 함수를 지정해야 합니다. (0) | 2023.03.12 |
| 리액트 베스트 프랙티스의 에러 처리 (0) | 2023.03.12 |
| WordPress는 메타 데이터로 사용자를 가져옵니다. (0) | 2023.03.12 |