我使用WebApi AuthorizationFilter来执行以下操作,如果你有中间件支持,也可以在MVC控制器和WebApi控制器上下文中执行此操作,例如对于WebApi,app.UseWebApi(app)。组件必须支持Owin管道,否则不确定如何获取正确线程的上下文。因此,您可以创建自己的自定义
OwinMiddleware,并在Owin启动时使用app.Use()将其连接到此组件。更多信息
here。我的属性中间件。
public class PropertiesMiddleware : OwinMiddleware
{
Dictionary<string, object> _properties = null;
public PropertiesMiddleware(OwinMiddleware next, Dictionary<string, object> properties)
: base(next)
{
_properties = properties;
}
public async override Task Invoke(IOwinContext context)
{
if (_properties != null)
{
foreach (var prop in _properties)
if (context.Get<object>(prop.Key) == null)
{
context.Set<object>(prop.Key, prop.Value);
}
}
await Next.Invoke(context);
}
}
Owin启动配置
public void Configuration(IAppBuilder app)
{
var properties = new Dictionary<string, object>();
properties.Add("AppName", AppName);
app.Use(typeof(PropertiesMiddleware), new object[] { properties });
}
WebApi 过滤器
public async Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext context, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
{
var owinContext = context.Request.GetOwinContext();
var owinEnvVars = owinContext.Environment;
var appName = owinEnvVars["AppName"];
}
愉快的编程!