我创建了新的ASP.NET vNext项目并将以下内容添加到Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
// Add cookie-based authentication to the request pipeline
app.UseCookieAuthentication(o =>
{
o.AuthenticationType = CookieAuthenticationDefaults.AuthenticationType;
o.LoginPath = new PathString("/Account/Login");
});
app.UseMvc();
app.UseWelcomePage();
app.UseIdentity();
}
和project.json
"dependencies": {
"Kestrel": "1.0.0-beta1",
"Microsoft.AspNet.Server.IIS": "1.0.0-beta1",
"Microsoft.Net.Http.Client": "1.0.0-*",
"Microsoft.AspNet.Hosting": "1.0.0-beta1",
"Microsoft.AspNet.Diagnostics": "1.0.0-beta1",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta1",
"Microsoft.Framework.Logging.Console": "1.0.0-beta1",
"Microsoft.AspNet.Mvc": "6.0.0-beta1",
"Microsoft.AspNet.Identity": "3.0.0-beta1",
"Microsoft.AspNet.Security": "1.0.0-beta1",
"Microsoft.AspNet.Security.Cookies": "1.0.0-*",
},
一开始,我收到以下异常
System.MissingMethodException
Method not found: 'Void Microsoft.Framework.Logging.LoggerExtensions.WriteWarning(Microsoft.Framework.Logging.ILogger, System.String)'.
at Microsoft.AspNet.Security.Cookies.CookieAuthenticationHandler.<AuthenticateCoreAsync>d__1.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder<TResult>.Start<TStateMachine>(TStateMachine& stateMachine)
at Microsoft.AspNet.Security.Cookies.CookieAuthenticationHandler.AuthenticateCoreAsync()
at System.Threading.LazyInitializer.EnsureInitializedCore<T>(T& target, Boolean& initialized, Object& syncLock, Func<T> valueFactory)
at System.Threading.LazyInitializer.EnsureInitialized<T>(T& target, Boolean& initialized, Object& syncLock, Func<T> valueFactory)
at Microsoft.AspNet.Security.Infrastructure.AuthenticationHandler.AuthenticateAsync()
at Microsoft.AspNet.Security.Infrastructure.AuthenticationHandler.<BaseInitializeAsync>d__1.MoveNext()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.AspNet.Security.Infrastructure.AuthenticationMiddleware<TOptions>.<Invoke>d__1.MoveNext()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.AspNet.Loader.IIS.KlrHttpApplication.<ProcessRequestAsyncImpl>d__1.MoveNext()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.AspNet.Loader.IIS.HttpApplicationBase.<InvokeProcessRequestAsyncImpl>d__1.MoveNext()N
从另一方面来看,下一行不会引发异常: loggerFactory.Create(&#34; TestLogger&#34;)。WriteWarning(&#34;一些警告信息&#34;);
答案 0 :(得分:1)
回答具体问题
您的问题似乎源于您正在混合依赖项版本的事实,而对于预发布依赖项,则没有兼容性栏。你基本上必须全面使用相同的版本。
我认为事情从这一行开始:
"Microsoft.AspNet.Security.Cookies": "1.0.0-*",
这意味着您要求提供最新的nuget包,并且根据您的nuget源(请分享您的nuget.config),这可能意味着您获得的此包的版本比其他包更新标记为beta1
例如:
"Microsoft.Framework.Logging.Console": "1.0.0-beta1",
尝试将软件包标记为1.0.0-beta1。
另一个注意事项
调用中间件的顺序很重要,它决定了管道的执行顺序。在您的情况下,您在MVC之后添加了身份,您希望将该行移到AddMvc上方。