Получение ошибки HTTP 500, доступ запрещен из веб-API

Предыстория: я работаю над продуктом, созданным с использованием AngularJS во внешнем интерфейсе и Microsoft Web Api во внутреннем. Веб-сайт размещен на компьютере с Windows Server 2012, на котором запущен IIS. Мы используем аутентификацию Windows для подключения к машине.

Проблема: вызов различных методов API работает безупречно для меня и большинства пользователей. Но некоторые пользователи не могут выполнять определенные вызовы API. Большинство конечных точек работают и возвращают достоверные данные, но некоторые методы даже не достигаются.

Это ошибка в журнале iislog: 2016-05-26 12:25:23 xx.xx.xxx.xx POST /api/controller/method — 80 домен\пользователь xx.xx.x. xx Mozilla/5.0+(совместимый;+MSIE+10.0;+Windows+NT+6.1;+WOW64;+Trident/6.0) http://xxxxxx.com/#/Pagename 500 0 0 514

В консоли гугл хром пишет: Ошибка: Отказано в доступе.

Я установил API для регистрации всех исключений в базе данных, и ошибки не отображаются. Итак, моя теория заключается в том, что API даже не достигается при попытке выполнить эти конкретные http-методы.

Я пытался искать ответы, но безуспешно. У кого-нибудь есть идеи?


person Markus Olsson    schedule 26.05.2016    source источник
comment
Если это работает для некоторых пользователей, а не для других, это почти наверняка проблема с привилегиями.   -  person Mike Feltman    schedule 26.05.2016
comment
Я не уверен, как работает ваше ведение журнала исключений, но ошибка 500 обычно указывает на то, что в фрагменте кода, к которому обращался API, возникло неперехваченное исключение. Так что это может потребовать дальнейшей отладки этого кода.   -  person seminull    schedule 26.05.2016
comment
@Mike Feltman Мы контролируем привилегии, проверяя, к каким группам безопасности Active Directory они принадлежат в API, и они находятся в тех же группах, что и мы. Тогда проблема с привилегиями будет связана с сервером iis, который отклоняет их до того, как они достигнут API, но только для этих определенных методов. Однако им удается получать информацию из других методов того же контроллера! Я очень смущен.   -  person Markus Olsson    schedule 26.05.2016
comment
@seminull Я использовал это: stackoverflow.com/a/21382651/3592773, и, похоже, он перехватывает каждое возникающее исключение. API. Я проверил это с помощью тестов.   -  person Markus Olsson    schedule 26.05.2016


Ответы (1)


Наконец-то я нашел решение своей проблемы, возникло исключение DbEntityValidationException. Он был выброшен, потому что некоторые имена пользователей были слишком длинными для вставки в таблицу базы данных. Это не было перехвачено и правильно отображено моей собственной общей обработкой исключений. Мне пришлось следовать этому руководству, чтобы зарегистрировать правильное исключение:

https://stackoverflow.com/a/6258174/3592773

Спасибо за всю помощь, и я надеюсь, что это может помочь кому-то еще в будущем.

person Markus Olsson    schedule 27.05.2016