Формат запроса не распознан для URL-адреса, неожиданно заканчивающегося



Это не вопрос - размещать его здесь для справки:



при использовании веб-сервиса, я получаю следующую ошибку:




формат запроса не распознан для URL неожиданно заканчивается на /myMethodName


585   14  

14 ответов:

найдено решение на этот сайт

все, что вам нужно, это добавить следующую строку в ваш веб.конфигурации

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

дополнительная информация от Microsoft

несмотря на 90% всей информации, которую я нашел (при попытке найти решение этой ошибки) говорит мне добавить HttpGet и HttpPost к конфигурации, которая не работает для меня... и все равно это не имело для меня никакого смысла.

мое приложение работает на многих серверах (30+), и мне никогда не приходилось добавлять эту конфигурацию для любого из них. Либо версия приложения, работающего под управлением .NET 2.0 или .NET 4.0.

решение для меня было перерегистрироваться ASP.NET против IIS.

я использовал следующую команду для достижения этой цели...

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>

Он хорошо работает на сервере, поскольку вызовы выполняются непосредственно к функции webservice-однако произойдет сбой, если вы запустите службу непосредственно из .Net в среде отладки и хотите проверить запуск функции вручную.

для записи я получал эту ошибку, когда я переместил старое приложение с одного сервера на другой. Я добавил <add name="HttpGet"/> <add name="HttpPost"/> элементов в интернете.конфигурация, которая изменила ошибку на:

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.конфигурационный файл

<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"
            });

в html вы должны заключить вызов в форме A с GET с чем-то вроде

<a href="/service/servicename.asmx/FunctionName/parameter=SomeValue">label</a>

вы также можете использовать POST при этом действие является местоположением веб-службы и вводит параметр через входной тег.

также SOAP и прокси-классы.

в моем случае у меня была перегрузка функции, которая вызывала это исключение, как только я изменил имя своей второй функции, она работала нормально, думаю, веб-сервер не поддерживает перегрузку функции

Я также получил эту ошибку с apache mod-mono. Похоже, что страница документации для webservice еще не реализована в linux. Но веб-сервис работает, несмотря на эту ошибку. Вы должны увидеть это, добавив ?WSDL в конце url, т. е. http://localhost/WebService1.asmx?WSDL

в нашем случае проблема была вызвана вызовом веб-службы с использованием метода запроса параметров (вместо GET или POST).

мы до сих пор не знаю, почему проблема вдруг появилась. Веб-служба работала в течение 5 лет отлично как по HTTP, так и по HTTPS. Мы единственные, кто потребляет веб-сервис, и он всегда использует POST.

недавно мы решили сделать сайт, на котором размещается только SSL веб-службы. Мы добавили правила перезаписи к Сеть.конфигурация для преобразования любого HTTP в HTTPS, развернута и сразу же начала получать, поверх обычных запросов GET и POST, запросы параметров. Запросы параметров вызвали ошибку, описанную в этом сообщении.

остальная часть приложения работала отлично. Но мы продолжали получать сотни сообщений об ошибках из-за этой проблемы.

есть несколько сообщений (например этот) обсуждение того, как обрабатывать метод OPTIONS. Мы пошли на обработку Параметры запроса непосредственно в глобальном.асакс. Это заставило проблему исчезнуть.

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var req = HttpContext.Current.Request;
        var resp = HttpContext.Current.Response;

        if (req.HttpMethod == "OPTIONS")
        {
            //These headers are handling the "pre-flight" OPTIONS call sent by the browser
            resp.AddHeader("Access-Control-Allow-Methods", "GET, POST");
            resp.AddHeader("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, SOAPAction");
            resp.AddHeader("Access-Control-Max-Age", "1728000");
            resp.End();
        }
    }

в моем случае ошибка произошла, когда я перехожу с моего локального ПК Windows 10 на выделенный сервер с Windows 2012. Решение для было добавить в интернет.конфиг следующие строки

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

убедитесь, что вы отключить пользовательские ошибки. Это может замаскировать исходную проблему в коде:

изменить

<customErrors defaultRedirect="~/Error" mode="On">

до

<customErrors defaultRedirect="~/Error" mode="Off">

WebMethod, который требует ContextKey,

[WebMethod]
public string[] GetValues(string prefixText, int count, string contextKey)

когда этот ключ не установлен, получил исключение.

исправление путем назначения ключа AutoCompleteExtender.

ac.ContextKey = "myKey";

Comments

    Ничего не найдено.