我有一个带有自定义自托管服务器的自定义Web堆栈(没有IIS,没有WCF)。它使用 HttpListener 来获取由模块管道处理的 HttpListenerContext 。所以,我正在处理模块中使用 HttpListenerRequest 和 HttpListenerRespose 。
现在我需要在某些特定情况下将 401 Unauthorized 返回给客户端。响应还应包括具有特定挑战的 WWW-Authenticate 标头。所以,我可以设置 HttpListenerRespose = 401的 StatusCode ,它工作正常。但是当我尝试将 Www-Authenticate 标头添加到共振时 - 我得到一个例外:“必须使用适当的属性或方法修改'WWW-Authenticate'标头。参数名称:name”。
正如我所看到的,WWW-Authenticate标头受到响应保护。 MSDN Documentation表示我无法使用Headers属性“设置Content-Length,Keep-Alive,Transfer-Encoding或WWW-Authenticate标头”。其中两个属性有KeepAlive和ContentLenght64属性,但“您无法手动设置Transfer-Encoding或WWW-Authenticate标头”
那么,什么是可能的解决方案?我应该如何正确返回具有特定WWW-Authenticate标头的401响应?
答案 0 :(得分:0)
HttpListenerResponse.AddHeader绕过此限制。见https://referencesource.microsoft.com/#System/net/System/Net/HttpListenerResponse.cs,265