[asp.net] URL이 예기치 않게 끝나는 요청 형식을 인식 할 수 없습니다.

이것은 질문이 아닙니다-참조를 위해 여기에 게시하십시오.

WebService를 사용할 때 다음 오류가 발생했습니다.

/ myMethodName으로 예기치 않게 끝나는 URL에 대한 요청 형식을 인식 할 수 없습니다.



답변

이 웹 사이트 에서 해결책을 찾았습니다

web.config에 다음을 추가하기 만하면됩니다.

<configuration>
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
  </system.web>
</configuration>

Microsoft의 추가 정보


답변

모든의 90 % 내가 찾은 정보에도 불구을 추가 말해 (이 오류에 대한 해결책을 찾기 위해 노력하면서) HttpGetHttpPost나를 위해 작동하지 않았다 즉, 구성에 … 어쨌든 나에게 이해가되지 않았다.

내 응용 프로그램이 많은 서버 (30 이상)에서 실행 중이며이 구성을 추가 할 필요가 없습니다. .NET 2.0 또는 .NET 4.0에서 실행되는 애플리케이션 버전입니다.

나를위한 해결책은 IIS에 ASP.NET을 다시 등록하는 것이 었습니다.

이것을 달성하기 위해 다음 명령 줄을 사용했습니다 …

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i


답변

올바른 방법을 사용하고 있는지 확인하십시오 : Post / Get, 올바른 컨텐츠 유형 및 올바른 매개 변수 (데이터).

$.ajax({
    type: "POST",
    url: "/ajax.asmx/GetNews",
    data: "{Lang:'tr'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) { generateNews(msg); }
})


답변

훌륭한.

사례 2-동일한 문제가 발생할 수있는 경우) 내 경우 문제는 다음 줄 때문입니다.

<webServices>
  <protocols>
    <remove name="Documentation"/>
  </protocols>
</webServices>

웹 서비스 함수를 직접 호출하면 서버에서 잘 작동하지만 디버그 환경의 .Net에서 직접 서비스를 실행하고 함수 실행을 수동으로 테스트하려는 경우 실패합니다.


답변

레코드의 경우 오래된 앱을 한 서버에서 다른 서버로 옮길 때이 오류가 발생했습니다. <add name="HttpGet"/> <add name="HttpPost"/>web.config에 요소를 추가 했는데 오류가 다음과 같이 변경되었습니다.

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at BitMeter2.DataBuffer.incrementCurrent(Int64 val)
   at BitMeter2.DataBuffer.WindOn(Int64 count, Int64 amount)
   at BitMeter2.DataHistory.windOnBuffer(DataBuffer buffer, Int64 totalAmount, Int32 increments)
   at BitMeter2.DataHistory.NewData(Int64 downloadValue, Int64 uploadValue)
   at BitMeter2.frmMain.tickProcessing(Boolean fromTimerEvent)

이 오류를 해결하려면 scriptHandlerFactory 행을 web.config에 추가해야합니다.

  <system.webServer>
    <handlers>
      <remove name="ScriptHandlerFactory" />
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </handlers>
  </system.webServer>

왜 하나의 웹 서버 에서이 줄없이 작동했는지, 다른 웹 서버에서는 알 수 없었습니다.


답변

이 문제를 해결하기 위해 다음 코드 줄을 사용합니다. web.config 파일에 다음 코드를 작성하십시오

<configuration>
    <system.web.extensions>
       <scripting>
       <webServices>
       <jsonSerialization maxJsonLength="50000000"/>
      </webServices>
     </scripting>
   </system.web.extensions>
</configuration>


답변

localhost에서 개발할 때 문제가 없었습니다. 그러나 웹 서버에 게시 한 후 웹 서비스가 빈 (빈) 결과를 반환하고 로그에 오류가 표시되었습니다.

내 ajax contentType을 다음과 같이 설정하여 수정했습니다.

"application/json; charset=utf-8"

그리고 사용 :

JSON.stringify()

내가 게시 한 객체에.

var postData = {data: myData};
$.ajax({
                type: "POST",
                url: "../MyService.asmx/MyMethod",
                data: JSON.stringify(postData),
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    console.log(data);
                },
                dataType: "json"
            });