Невозможно получить доступ к иначе доступному веб-API с точками в URL - PullRequest
1 голос
/ 23 мая 2019

У меня есть веб-сервис, развернутый на IIS 8.5 (Windows Server 2012 R2), который должен вызываться с передачей четырех аргументов.Они не являются обязательными и должны быть включены непосредственно в URL без строки запроса, например:

.. api / myservice / аргумент1 / аргумент2 / аргумент3 / аргумент4

Если я попытаюсь позвонить по указанному выше URL-адресу, он ответит и даст ожидаемый ответ.Однако вместо этого 404 - Not Found выдается ошибка при попытке использовать реальные производственные аргументы как таковые:

api / myservice / AAAA_AAAAA.AAA_AAA_AA_AA_AAA_000000_000000_000000 / 333 / AAA /AAA.AAA.AA.AA.AAA.000000.000000.000000

Я думал, что проблема возникла с несколькими точками, поэтому я заменил каждую из них на % 2E , но ничегоизменилось.Я уже искал ответы на вопросы: я пытался это и это , но безрезультатно.

В чем проблема с этим производственным URL-адресом?Вот код API:

[RoutePrefix("api/myservice")]
public class MyServiceController : ApiController
{
   [HttpGet]
   [Route("{argument1}/{argument2}/{argument3}/{argument4}")]
   public string StartValidation(string argument1, string argument2, string argument3, string argument4)
   {
      // operations...
   }
}

Я проследил запрос с помощью IIS Failed Request Tracing, как было предложено в ответе, но я не могу найти подсказку в итоговом журнале: enter image description here Кто-нибудь может мне помочь?

Ответы [ 3 ]

0 голосов
/ 23 мая 2019

Сначала попытайтесь развернуть его на своем локальном Iis, если он работает, означает, что ваша продукция может иметь другую конфигурацию на уровне IIS, или скомпилированный код не совпадает с тем, который у вас есть, и вам нужноповторно разверните API.Если API перестает работать на уровне вашего локального IIS, и он работает правильно от vs (если вы передаете какой-либо параметр почтальону), то вы достигли точки останова бэкэнда, тогда у вас неправильная конфигурация в вашем развертывании в вашем локальном IIS.Если вы никогда не достигнете точки останова, у вас будет ошибка на уровне вашего кода.Надеюсь, это поможет

0 голосов
/ 23 мая 2019

Я наконец-то решил это. Я добавил кусочный код, предоставленный этим ответом , в совершенно идентичный вопрос к web.config, но возникла другая проблема: казалось, что IIS нужно было запускать в «Интегрированном режиме». Благодаря подсказке этого ответа к вопросу об этой последующей проблеме я переключил Режим управляемого конвейера пула приложений, в котором был развернут API, с Classic до Интегрировано , что позволило этому коду работать. Наконец, веб-API принимает аргументы с точками.

0 голосов
/ 23 мая 2019

Включить проверку IIS на IIS для проверки.

https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/sites/site/tracefailedrequestslogging

Хорошая возможность того, что IIS отклоняет их как часть URLScan (если включена), но FRT подтвердит.

...