Общим вариантом использования для WebAPI было бы иметь представления оболочки, отображаемые MVC-контроллерами, которые содержат javascript, который затем попадает в ваш API для доступа к данным.
Но скажем, что у вас есть некоторые дорогостоящие операции API, и вы не хотите, чтобы люди могли удаленно обращаться к этим конечным точкам - вам нужны только ваши просмотры MVC, предоставленные вашим приложением, для доступа к ним. Как вы могли защитить их?
В этом случае Request.IsLocal
не работает, потому что javascript вызывает его из браузера клиента на своей машине. Даже если это сработало, вам нужно копать, чтобы получить реальный HttpContext
, чтобы найти это свойство, - и это решение не будет работать в самообслуживании WebAPI.
Для конечных точек API, для которых требуется действительный IPrincipal
, вы можете защитить их с помощью атрибута [Authorize]
. Но как насчет конечных точек API, к которым вы хотите, чтобы ваше приложение было доступно для анонимных пользователей?
Я попробовал решение и опубликую его отдельно как ответ, потому что я не уверен, что это лучший (или даже хороший) подход.