Conflict Unity DI for WebApi2 With Cors

本文关键字:With Cors WebApi2 for Unity DI Conflict | 更新日期: 2023-09-27 18:37:25

我正在使用基于Oauth2令牌的SSO。 我的应用程序之一,它与启动配置的机器密钥同步到 SSO,请看下面:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        HttpConfiguration config = new HttpConfiguration();
        ConfigureOAuth(app);
        WebApiConfig.Register(config);
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
        app.UseWebApi(config);
    }
    private void ConfigureOAuth(IAppBuilder app)
    {
        //Token Consumption
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
        {
        });
    }
}

然后,我针对 MVC5 和 WebAPI2 的 Unity DI 配置采用以下方法:

public static class UnityWebActivator
{
    /// <summary>Integrates Unity when the application starts.</summary>
    public static void Start() 
    {
        var container = UnityConfig.GetConfiguredContainer();
        FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
        FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));
        GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }
    // TODO: Uncomment if you want to use PerRequestLifetimeManager
    // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
    /// <summary>Disposes the Unity container when the application is shut down.</summary>
    public static void Shutdown()
    {
        var container = UnityConfig.GetConfiguredContainer();
        container.Dispose();
    }
}

DI 与我的 MVC 控制器配合使用良好,但对于 WebApi 控制器不起作用。谢谢。

Conflict Unity DI for WebApi2 With Cors

我的问题解决了。

我将webApi配置移动到global.asax application_start,然后我的创业公司.cs代码采用以下方法:

public void Configuration(IAppBuilder app)
    {
        //HttpConfiguration config = new HttpConfiguration();
        ConfigureOAuth(app);
        //WebApiConfig.Register(config);
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
        //app.UseWebApi(config);
    }

我的application_start代码都采用以下方法:

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        UnityWebActivator.Start();
    }