0

我有一个带有自定义自托管服务器(没有 IIS,没有 WCF)的自定义 Web 堆栈。它使用HttpListener来获取由模块管道处理的HttpListenerContext 。所以,我在处理模块中使用HttpListenerRequestHttpListenerRespose 。

现在我需要在某些特定情况下向客户端返回401 Unauthorized 。响应还应包括带有特定挑战的WWW-Authenticate标头。所以,我可以设置HttpListenerRespose = 401的StatusCode并且它工作正常。但是,当我尝试将Www-Authenticate标头添加到响应中时 - 我得到一个异常:“必须使用适当的属性或方法修改 'WWW-Authenticate' 标头。参数名称:名称”。

如我所见, WWW-Authenticate 标头受到响应保护。MSDN 文档说我不能“使用 Headers 属性设置 Content-Length、Keep-Alive、Transfer-Encoding 或 WWW-Authenticate 标头”。其中两个有 KeepAlive 和 ContentLenght64 属性,但是“您不能手动设置 Transfer-Encoding 或 WWW-Authenticate 标头”

那么,什么是可能的解决方案?我应该如何正确返回带有特定 WWW-Authenticate 标头的 401 响应?

4

1 回答 1

0

HttpListenerResponse.AddHeader 绕过了这个限制。请参阅https://referencesource.microsoft.com/#System/net/System/Net/HttpListenerResponse.cs,265

于 2018-03-24T15:06:18.390 回答