Как я могу возвратить HTTP 401 из службы WCF?
Если вы программируете 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:
(источник: robbagby. com)
(source: robbagby.com)
(source: robbagby. com)
Также существует HttpStatusCode.Unauthorized
, который соответствует 401 коду статуса.
Смотрите отличный пост в блоге Rob Bagby Effective Error Handling with WCF REST для более детального ознакомления с различными способами указания кодов возврата HTTP. (скриншоты взяты из записи блога Роба - он заслуживает всяческих похвал за это)
. В зависимости от того, когда необходимо выполнить проверку авторизации, это можно сделать в HttpModule HttpModule
, используя что-то вроде:
HttpContext context = HttpContext.Current;
context.Response.StatusCode = 401;
context.Response.End();