简体   繁体   中英

Conflict Unity DI for WebApi2 With Cors

I'm using Oauth2 Token based for SSO. one of my application that sync to SSO with MachineKey that StartUp configs Take bellow:

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
        {
        });
    }
}

Then My Unity DI Configs for both MVC5 and WebAPI2 Take Bellow:

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 Work good with my MVC controllers, but For WebApi controllers not work. Thanks.

my problem solved.

i moved webApi configs to application_start of global.asax. then my startup.cs codes take bellow:

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

and application_start of my code take bellow:

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

        UnityWebActivator.Start();
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM