5

如何从 WCF 服务返回 HTTP 401?

4

4 回答 4

6
throw new WebFaultException(System.Net.HttpStatusCode.Unauthorized);

笔记:

MSDN:使用 WCF REST 端点(WebHttpBinding 和 WebHttpBehavior 或 WebScriptEnablingBehavior)时,响应上的 HTTP 状态代码会相应设置。但是,WebFaultException 可以与非 RE​​ST 端点一起使用,并且其行为类似于常规的 FaultException。

于 2011-12-08T00:40:11.553 回答
6

如果您正在编写 REST 服务,则可以通过以下方式完成:

private IWebOperationContext context = new WebOperationContextWrapper(WebOperationContext.Current); // Get the context

context.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized; // Set the 401
于 2009-12-28T08:16:06.473 回答
1

如果您使用 WCF REST Starter Kit 中的 WebServiceHost2 工厂,您还可以抛出特定WebProtocolException的并指定 HTTP 返回代码:

替代文字
(来源:robbagby.com

替代文字
(来源:robbagby.com

替代文字
(来源:robbagby.com

还有一个HttpStatusCode.Unauthorized对应于 401 状态码。

有关指定 HTTP 返回码的各种方法的更多详细信息,请参阅 Rob Bagby 的优秀博客文章使用 WCF REST 进行有效错误处理。(截图来自 Rob 的博文——他应该为此获得所有功劳。)

于 2009-12-28T08:41:36.560 回答
0

根据您需要进行授权检查的时间,您可以HttpModule使用如下方式进行检查:

HttpContext context = HttpContext.Current;
context.Response.StatusCode = 401;
context.Response.End();
于 2009-12-28T07:16:32.927 回答