Я использую WCF REST с FormsAuthentication.Этот режим аутентификации переопределяет статус ответа HTTP 401 Unauthorized
с помощью HTTP 302 Found
, который перенаправляет на "URL входа в систему", как в веб-приложении.
Конечно, это не имеет смысла в приложении REST WCF,и я хотел бы убедиться, что статус 401 поступает запрашивающей стороне.
Я пытался сделать это:
var response = WebOperationContext.Current.OutgoingResponse;
response.StatusCode = HttpStatusCode.Unauthorized;
HttpContext.Current.Response.SuppressContent = true;
HttpContext.Current.Response.StatusCode = 401;
HttpContext.Current.Response.End();
Но когда эти строки выполняются, я получаю исключение в моем клиентебоковой вызов:
System.Net.WebException occurred
Message=The underlying connection was closed: An unexpected error occurred on a receive.
Source=System
StackTrace:
at System.Net.HttpWebRequest.GetResponse()
at RestPrototype.Web.Infrastructure.Http.ByPassGet(HttpContextBase httpContext, Uri url) in D:\TFS Source\PROTOTYPE\RestPrototype.Web\Infrastructure\Http.cs:line 165
InnerException: System.IO.IOException
Message=Unable to read data from the transport connection: The connection was closed.
Source=System
StackTrace:
at System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.HttpWebRequest.MakeMemoryStream(Stream stream)
InnerException:
На Fiddler я вижу, что 401 отправлено:
HTTP/1.1 401 Unauthorized
Cache-Control: private
Transfer-Encoding: chunked
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 03 Oct 2011 15:22:41 GMT
Что Transfer-Encoding: chunked
и другая сторона, закрывающая соединение без отправки тела, вызываетэто исключение на стороне клиента.К сожалению, я не знаю, как избежать этого заголовка и поставить Content-Length: 0
, так как ASP.NET переопределяет его.
Я хотел бы решить это в стиле WCF, без использования пользовательского HttpModule, если это возможно.И если кто-то знает способ предотвратить переопределение ASP.NET моих заголовков, будет очень приветствоваться.
С уважением.