servicestack,C#,servicestack" /> servicestack,C#,servicestack" />

C# JsonServiceClient响应过滤器不';t触发器

C# JsonServiceClient响应过滤器不';t触发器,c#,servicestack,C#,servicestack,也许我遗漏了一些简单的东西,但我一辈子都无法在ServiceStack中的JsonServiceClient上触发ResponseFilter。RequestFilter每次都会触发(我正在向我的API发送一个API令牌)。下面是一个示例控制台应用程序,它显示了ResponseFilter从不写入控制台 static void Main(string[] args) { using (var client = new JsonServiceClient()) {

也许我遗漏了一些简单的东西,但我一辈子都无法在ServiceStack中的
JsonServiceClient
上触发
ResponseFilter
RequestFilter
每次都会触发(我正在向我的API发送一个API令牌)。下面是一个示例控制台应用程序,它显示了
ResponseFilter
从不写入控制台

static void Main(string[] args)
{
    using (var client = new JsonServiceClient())
    {
        client.ResponseFilter = httpResponse =>
        {
            Console.WriteLine("ResponseFilter: StatusCode == " + httpResponse.StatusCode);
        };

        try
        {
            System.Net.HttpWebResponse response = client.Get("https://app.asana.com/api/1.0/users/me");
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception => " + e.Message);
        }
    }
    Console.ReadLine();
}

我使用的是最新的ServiceStack v4.0.40.0

您提供的示例代码单独来看,除了在using语句中处理的客户机之外,看起来是正确的

创建客户机后,可以在ResponseFilter上注册操作,如上所示

我已经创建了一个空的ServiceStack ASP.NET解决方案,该解决方案带有一个单元测试,该测试显示此筛选器正在工作

代码的主要部分与您提供的代码片段非常相似

bool calledRepsonseFilter = false;
var jsonServiceClient = new JsonServiceClient("http://techstacks.io/");
jsonServiceClient.ResponseFilter = response =>
{
    Console.WriteLine("A response!");
    calledRepsonseFilter = true;
};
var res = jsonServiceClient.Get(new AppOverview());
Assert.That(res.TopTechnologies != null);
Assert.That(calledRepsonseFilter == true);
我在ServiceStack论坛上给出了相同的答案,但用答案更新了这个问题,以防它对其他人也有帮助


希望能有所帮助。

您能提供更多的工作示例吗?我在这里看到的一个问题是,您正在处理
JsonServiceClient
,这意味着,如果您使用未提供的代码中的某个地方进行请求,您可能正在使用另一个实例。@Layric感谢您的反馈,但是有两件事…(1)如果我不处理客户端,此示例仍然失败;(2)在我正在编写的完整代码中,我在后续调用之间重复使用客户端,因此它也不会在那里被处理。对于未来的访问者,问题在于当异常发生时,
ResponseFilter
不会被触发(比如401,这是我试图在筛选器中处理的)。相反,我已经开始使用定制的
JsonServiceClient
并覆盖
HandleResponseException