【发布时间】:2020-07-30 03:49:11
【问题描述】:
我有一个方法:
public virtual async Task<IActionResult> GetEmployees([HttpTrigger(AuthorizationLevel.Admin, "get", Route = null)] HttpRequest req) {
return OkObjectResult(null);
}
我知道我可以使用 autofac 同步拦截:
public class CallLogger : IInterceptor
{
TextWriter _output;
public CallLogger(TextWriter output)
{
_output = output;
}
public void Intercept(IInvocation invocation)
{
_output.Write("Calling method {0} with parameters {1}... ",
invocation.Method.Name,
string.Join(", ", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray()));
invocation.Proceed();
_output.WriteLine("Done: result was {0}.", invocation.ReturnValue);
}
}
但是如何在可能覆盖我正在拦截的方法返回的结果的同时异步执行此操作?它目前返回一个OkObjectResult,例如,我可能想返回一个 404。
伪代码
public async Task Intercept(IInvocation invocation)
{
var myAsyncResult = await _myAsyncClass.MyAsyncMethod();
if (myAsyncResult == expected)
{
invocation.Proceed();
}
else
{
invocation.ReturnValue = // some overwrite of the value - and don't proceed with the invocation.
}
}
注意
我知道 autofac 中有一些巧妙的异步方法,但这不允许我阻止执行原始方法并覆盖值,而是我需要“继续”调用并使用它的返回:https://stackoverflow.com/a/39784559/12683473
【问题讨论】:
标签: c# .net autofac interceptor