如何在Azure Function中使用AddWebEncoders()并依赖注入编码器?
解决方案
你可以直接通过构造函数注入HtmlEncoder类型来使用DI容器中的实例,具体步骤如下:
- 修改
DataService的构造函数,添加HtmlEncoder参数:
public class DataService : IDataService { private readonly HtmlEncoder _htmlEncoder; // 通过构造函数注入HtmlEncoder public DataService(HtmlEncoder htmlEncoder) { _htmlEncoder = htmlEncoder; } public async Task<string> GetHtmlData() { // 使用注入的编码器实例进行编码 string encodedData = _htmlEncoder.Encode("<img src=x onerror=confirm(\"HACKED\")>"); return await Task.FromResult(encodedData); } }
- 保持你现有的Host配置不变(已调用
services.AddWebEncoders()),DI容器会自动将注册的HtmlEncoder实例注入到DataService中。
补充说明
AddWebEncoders()方法会将HtmlEncoder、JavaScriptEncoder和UrlEncoder都注册到服务容器中,可根据需求注入对应的类型。- 使用DI注入的编码器优势在于:后续若需自定义编码器配置(比如允许特定字符、修改编码规则),只需在
AddWebEncoders()中添加配置即可,无需修改业务代码,示例如下:
services.AddWebEncoders(options => { options.HtmlEncoder = HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs }); });
内容的提问来源于stack exchange,提问作者Fylix
相关产品推荐
相关产品推荐

