Owin SuppressDefaultHostAuthentication和现有的HTTP模块

时间:2015-03-17 20:13:36

标签: asp.net asp.net-web-api owin httpmodule

在现有的ASP.NET MVC应用程序中,我添加了WebAPI。我已经使用了从一个全新的项目中生成的大部分模板代码。

我正面临一些与身份验证有关的问题。为了避免我添加的api的正常登录过程:

config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

根据默认模板。

但是,我在调用我的api时遇到错误:“没有OWIN身份验证管理器与请求相关联。”

我发现这是因为有一个自定义HTTP模块处于活动状态。从web.config中删除模块使API工作。但是,“普通”Web应用程序需要此模块。

有没有办法让HTTP模块与owin认证共存?

模块的定义如下:

public class MGPContextInitializerModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        if (context != null)
        {
            context.AcquireRequestState += AcquireRequestState;
            context.BeginRequest += new EventHandler(BeginRequest);
        }
    }

    private void AcquireRequestState(object sender, EventArgs e)
    {
        if (HttpContext.Current.Session != null)
        {
           InitializeUserCulture(new HttpContextWrapper(HttpContext.Current).GetSessionID());
        }
    }

    private void BeginRequest(object sender, EventArgs e)
    {
        InitializeCustomer((HttpApplication)sender);
    }

    private static void InitializeInstantie(HttpApplication application)
    {
        HttpContextBase contextBase = new HttpContextWrapper(application.Context);
        RouteData routeData = RouteTable.Routes.GetRouteData(contextBase);

        if (routeData != null)
        {
            var customer = routeData.Values["customer"];
            if (customer != null)
            {
                Initializer.InitializeCustomer(customer.ToString());
            }
        }
    }
}

0 个答案:

没有答案