Asp.net 上下文中缺少owin

Asp.net 上下文中缺少owin,asp.net,owin,thinktecture-ident-model,Asp.net,Owin,Thinktecture Ident Model,我试图从中使用ResourceAuthorize属性,但由于没有owin上下文,所有操作都停止了 我有一个owin启动类,用于设置授权管理器 [assembly: OwinStartup(typeof(My.WebApi.Startup))] namespace My.WebApi { public class Startup { public void Configuration(IAppBuilder app) {

我试图从中使用
ResourceAuthorize
属性,但由于没有owin上下文,所有操作都停止了

我有一个owin启动类,用于设置授权管理器

[assembly: OwinStartup(typeof(My.WebApi.Startup))]

namespace My.WebApi
{
    public class Startup
    {        
        public void Configuration(IAppBuilder app)
        {
            AuthConfig.Configure(app);
        }
    }
}

public class AuthConfig
{
    public static void Configure(IAppBuilder app)
    {         
        app.UseResourceAuthorization(new ResourceAuthorizationMiddlewareOptions
        {
            Manager = GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IResourceAuthorizationManager)) as IResourceAuthorizationManager
        });
    }
}
我知道它被检测和调用。但稍后,当从
IdentityModel
点击以下代码时,我得到一个空指针异常:

    public static Task<bool> CheckAccessAsync(this HttpRequestMessage request, IEnumerable<Claim> actions, IEnumerable<Claim> resources)
    {
        var authorizationContext = new ResourceAuthorizationContext(
            request.GetOwinContext().Authentication.User ?? Principal.Anonymous,
            actions,
            resources);

        return request.CheckAccessAsync(authorizationContext);
    }
更新2:


在mvc控制器内部,上下文是可用的。但不是在webapi控制器中。

一位队友找到了解决方案。他只是在owin启动类中添加了以下行:

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

然而,为什么这能解决这个问题是另一个谜。但是我们正在使用wsFederation,所以我想需要一些方法。但是如果我们不使用wsFed呢?我们还需要它来获取上下文吗?谁知道…

您可以安全地删除global.asax文件,这样您的应用程序中就只有一个入口点。我不确定这是否会解决一些问题,但它肯定会让事情变得更干净……VS附带的web应用程序模板同时创建global.asax和startup类。有人说“留下来”是可以的,因为这样可以很容易地将事件与。。。我不确定移除它是否会对我有帮助,但我会尝试。
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);