2013-07-11 5 views
2

Я работаю над реализацией пользовательского FormsAuthenticationProvider, и у меня возникает ошибка преобразования промежуточного программного обеспечения.Реализация пользовательского FormsAuthenticationProvider с использованием Owin, Katana и Nancy

No conversion available between System.Func`2[System.Collections.Generic.IDictionary`2 
[System.String,System.Object],System.Threading.Tasks.Task] and Microsoft.Owin.OwinMiddleware 
Parameter name: signature 

Мой стек включает

  • Owin
  • Katana
  • Нэнси

Мой конкретный вопрос будет какой-нибудь совет о том, где искать пример о том, как реализовать обычай FormsAuthenticationProvider? Если кто-то не обнаружит мою проблему.

Моя реализация выглядит следующим образом:

Startup.cs

app.UseFormsAuthentication(new FormsAuthenticationOptions 
      { 
       LoginPath = "/login", 
       LogoutPath = "/logout", 
       CookieHttpOnly = true, 
       AuthenticationType = Constants.ChainLinkAuthType, 
       CookieName = "chainlink.id", 
       ExpireTimeSpan = TimeSpan.FromDays(30), 
       Provider = kernel.Get<IFormsAuthenticationProvider>() 
      }); 

Если удалить app.UseFormsAuthentication(...) приложение работает без ошибок.

Полный Трассировка стека

[ArgumentException: No conversion available between System.Func`2[System.Collections.Generic.IDictionary`2[System.String,System.Object],System.Threading.Tasks.Task] and Microsoft.Owin.OwinMiddleware 
Parameter name: signature] 
    Owin.Builder.AppBuilder.Convert(Type signature, Object app) +328 
    Owin.Builder.AppBuilder.BuildInternal(Type signature) +336 
    Owin.Builder.AppBuilder.Build(Type returnType) +42 
    Microsoft.Owin.Host.SystemWeb.OwinAppContext.Initialize(Action`1 startup) +650 
    Microsoft.Owin.Host.SystemWeb.OwinBuilder.Build(Action`1 startup) +86 
    Microsoft.Owin.Host.SystemWeb.OwinBuilder.Build() +185 
    System.Lazy`1.CreateValue() +416 
    System.Lazy`1.LazyInitValue() +152 
    System.Lazy`1.get_Value() +75 
    Microsoft.Owin.Host.SystemWeb.OwinApplication.get_Instance() +35 
    Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(HttpApplication context) +106 
    System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +418 
    System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172 
    System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336 
    System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296 

[HttpException (0x80004005): No conversion available between  System.Func`2[System.Collections.Generic.IDictionary`2[System.String,System.Object],System.Threading.Tasks.Task] and Microsoft.Owin.OwinMiddleware 
Parameter name: signature] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9874568 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254 

Исполняемые Исходный код (Просто F5 это, и вы получите ошибку сразу)

https://github.com/cnwilkin/ChainLink/tree/spike

ответ

4

Вы можете попробовать обновить версию Microsoft.Owin.Host.SystemWeb пакет до последнего RC, а также и попробовать? У вас есть все другие Owin * dlls в rc, но это 1.0.0. Может быть причиной проблемы. Также используйте Microsoft.Owin.Security.Cookies вместо Microsoft.Owin.Security.Forms. Пакет Forms теперь переименован в Cookies.

+1

Спасибо большое, что все исправлено. –

+0

Я пошел в nuget и щелкнул обновление, и ошибка преобразования ушла – Luke