Angular[Inerhtml]呈现不同于webapi响应的静态文件



需要在div中显示HTML文件内容,在静态文件中工作,在动态文件中失败。

工作原理:

我有一个EML文件,我怀疑我必须解析它。将文件扩展名重命名为HTML,令人愉快的是,它有点不错,删除了所有标记并正确格式化,如果从静态文件提供。

public getOneFileStatic(fn: string): Observable<any> {
return this.http.get(fn, { responseType: 'text' })
.pipe(tap(_ => console.log('== getOneFileStatic ')));
}

简称

svc.getOneFileStatic('/assets/files/eml-test.html')
.subscribe(x => {                        
this.theinner = x;
});

模板是

<div class="card-block">
<div [innerHTML]="theinner | safeHtml" style="width: 100%"></div>
</div>

什么没有,并显示带有标记的原始文本

然后尝试了从webapi返回的动态方式:

public getOneFile(fn: string): Observable<any> {
return this.http.get( this.baseUrl + '/api/ServerFiles/GetStream/' + fn , { responseType: 'text' })
.pipe(tap(_ => console.log('== getOneFile '))
);
}

结果是所有标签和MIME内容都按原样转储的文本流。

我看了看

我检查了内容标题并尝试了:文本、blob等,还有application/octet。但它们给人的感觉都很好,并且都是原始显示的,HTML标签从未受到尊重。

标头:当向提供静态文件时

Referrer Policy: no-referrer-when-downgrade
HTTP/1.1 304 Not Modified
X-Powered-By: Express
Access-Control-Allow-Origin: *
Accept-Ranges: bytes
ETag: W/"cb81-Rb8BCAxZvy4eWO/lkggYEFPkXzo"
Date: Wed, 16 Jan 2019 21:33:45 GMT
Connection: keep-alive

当动态文件出现时:

HTTP/1.1 200 OK
Date: Thu, 17 Jan 2019 00:52:35 GMT
Content-Type: text/html
Server: Kestrel
Content-Length: 97197
Vary: Origin
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:4200

注意:在静态的情况下没有Content-Type头。但当流式传输文件内容时,我需要在服务器代码中提供一个,即Kestrel和.Net代码。

您可能需要尝试使用标签清理生成的原始文本

查看Angular Sanizization API示例(基本但可能足够)。

最新更新