多站点环境下为单个站点启用Content Delivery API的配置方法
如何在EPiServer CMS 11中限制Content Delivery API仅对单个站点开放
在EPiServer CMS 11的多站点环境下,你可以通过两种方式限制Content Delivery API的访问范围,仅对指定站点开放:
方法一:通过配置文件快速限制(基于主机名)
直接修改项目的Web.config,在appSettings节点中添加站点主机名白名单配置:
<appSettings> <!-- 替换为你要开放API的目标站点主机名 --> <add key="episerver:contentdeliveryapi:allowedSiteHosts" value="your-target-site-domain.com" /> </appSettings>
配置后,只有来自该主机名的API请求会被正常处理,其他站点的请求会返回403禁止访问。
方法二:自定义授权过滤器(基于站点ID精准控制)
如果需要基于站点ID而非主机名进行限制,可以自定义一个Web API授权过滤器:
- 创建过滤器类:
using System.Web.Http.Controllers; using System.Web.Http.Filters; using EPiServer.Web; using System.Net.Http; using System.Net; public class RestrictApiToSpecificSiteAttribute : AuthorizationFilterAttribute { private readonly string _allowedSiteId; public RestrictApiToSpecificSiteAttribute(string allowedSiteId) { _allowedSiteId = allowedSiteId; } public override void OnAuthorization(HttpActionContext actionContext) { var currentSite = SiteDefinition.Current; // 检查当前请求所属站点ID是否匹配目标ID if (currentSite == null || currentSite.Id.ToString() != _allowedSiteId) { actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden) { ReasonPhrase = "Content Delivery API access is restricted to the specified site." }; return; } base.OnAuthorization(actionContext); } }
- 在Web API配置中注册全局过滤器:
打开WebApiConfig.cs,在Register方法中添加过滤器(替换为你的目标站点ID):
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // 注册全局过滤器,限制API仅对指定站点开放 config.Filters.Add(new RestrictApiToSpecificSiteAttribute("your-target-site-guid-here")); } }
注意事项
- 方法一配置简单,适合大多数基于域名的场景;
- 方法二更灵活,适合站点域名可能变化但站点ID固定的场景;
- 测试时需确保请求的上下文正确关联到目标站点,避免出现误拦截或权限遗漏。
内容的提问来源于stack exchange,提问作者Farhin Shaikh
相关产品推荐
相关产品推荐

