servicestack:将www-authenticate标头添加到错误响应中

时间:2013-05-05 21:14:46

标签: servicestack

由于缺少授权而抛​​出401错误,我想要包含www-authenticate标头。

但我该怎么做?

我尝试使用响应过滤器,但这似乎不起作用。

修改

抛出httperror时不会调用我的响应过滤器:

appHost.ResponseFilters.Add((req, res, obj) => res.AddHeader(HttpHeaders.WwwAuthenticate, "Basic realm=..."));

调用异常处理程序,但添加的标头不是响应的一部分(根据Chrome开发工具和Postman

appHost.ExceptionHandler += (req, res, name, exception) => res.AddHeader(HttpHeaders.WwwAuthenticate, "Basic realm=...");

1 个答案:

答案 0 :(得分:1)

我找不到可以添加到响应头的任何钩子:

    抛出异常后,不会调用
  • ResponseFilters
  • ServiceExceptionHandler未提供响应对象。
  • ExceptionHandler在发送响应后被称为,因此要迟到。

由于我在请求过滤器中检查凭据,因此我可以访问响应对象。我最终得到了一个自定义异常LogonException,我可以捕获并添加标题:

appHost.RequestFilters.Add(
    (req, res, obj) => 
    {
        var creds = request.GetBasicAuthUserAndPassword();

        try
        {
            myService.logon(creds);
        }
        catch(LogonException)
        {
            res.AddHeader(HttpHeaders.WwwAuthenticate, "Basic realm=...");
            trow;
        }
    });