WebAPI 的一个常见用例是让 MVC 控制器呈现 shell 视图,其中包含然后命中您的 API 以访问数据的 javascript。
但是,假设您有一些昂贵的 API 操作,并且您不希望人们远程访问这些端点——您只希望由您的应用程序提供的 MVC 视图访问它们。你怎么能保护他们?
在这种情况下Request.IsLocal
不起作用,因为 javascript 正在从他们机器上的客户端浏览器调用它。即使它确实有效,您也需要深入挖掘HttpContext
才能找到此属性——而该解决方案在自托管 WebAPI 中不起作用。
对于需要有效的 API 端点,您可以使用属性IPrincipal
保护它们。[Authorize]
但是,您希望您的应用程序能够为匿名用户访问的 API 端点呢?
我已经尝试了一个解决方案,并将其作为答案单独发布,因为我不确定它是否是最好的(甚至是好的)方法。