Как я могу вернуть HTTP 401 из службы WCF?Возврат 401 из службы WCF
ответ
В зависимости от того, когда вам нужно сделать проверку авторизации, вы можете сделать это в HttpModule
используя что-то вроде следующего:
HttpContext context = HttpContext.Current;
context.Response.StatusCode = 401;
context.Response.End();
Не совсем верно ... вы можете сделать это с ЛЮБОЙ из xHttpBindings. – WayneC
Если вы программируете REST-сервис это можно сделать так:
private IWebOperationContext context = new WebOperationContextWrapper(WebOperationContext.Current); // Get the context
context.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized; // Set the 401
Если вы используете WebServiceHost2 завод из WCF REST Starter Kit, вы можете также бросить конкретный WebProtocolException
и указать код HTTP возврата:
alt text http://www.robbagby.com/wp-content/uploads/effective-error-handling-with-wcf-rest/image_thumb_5.png alt text http://www.robbagby.com/wp-content/uploads/effective-error-handling-with-wcf-rest/image_thumb_10.png alt text http://www.robbagby.com/wp-content/uploads/effective-error-handling-with-wcf-rest/image_thumb_12.png
Там также HttpStatusCode.Unauthorized
который соответствует коду 401 статуса.
Дополнительную информацию о различных способах указания кодов возврата HTTP см. В превосходном сообщении блога Роба Бэбби Effective Error Handling with WCF REST. (Скриншоты из блоге Роба - он заслуживает кредит на это.)
throw new WebFaultException(System.Net.HttpStatusCode.Unauthorized);
Примечания: «MSDN: При использовании конечной точки WCF REST (WebHttpBinding и WebHttpBehavior или WebScriptEnablingBehavior) в HTTP-код состояния на ответ поэтому WebFaultException может использоваться с конечными точками без REST и ведет себя как обычное исключение FaultException. "
Выполняют функцию [OperationContract, WebInvoke] [Service]? –