我知道有很多帖子與此相似。但是,我經歷了他們,一直無法找到解決我的問題的方法。Asp.Net API 2 Ninject和OWIN OAuth配置
我正在使用OWIN實現OAth身份驗證到以前的項目中,該項目利用Ninject進行依賴注入。
使用OWIN從原始的Global.asax Application_Start配置方法切換到創建用於配置OWIN的Start.cs文件/類來實現OATH。
我面臨的問題是無論我在運行代碼時嘗試什麼實現,API請求總是返回錯誤「確保控制器具有無參數公共構造函數」。
請有人可以點亮一下爲什麼以下方法都不起作用?
我第一次嘗試解決該問題是使用app.UseNinjectWebApi與app.UseNinjectMiddleware。其次,我嘗試了一個NinjectDependencyResolver,在之前的許多帖子中都提到過。 Link to similar post。
下面是兩個實現的代碼。
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
var kernel = NinjectWebCommon.CreateKernel();
// Using this and UseNinjectWebAPI
app.UseNinjectMiddleware(() => kernel);
ConfigureOAuthTokenGeneration(app);
ConfigureWebApi(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
WebApiConfig.Register(config);
app.UseNinjectWebApi(config);
// Also tried this (when the following lines are uncommented UseNinjectMiddleware and useNinjectWebApi is commented)
// This causes "Make sure that the controller has a parameterless public constructor" error
//GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);
//app.UseWebApi(config);
}
private void ConfigureOAuthTokenGeneration(IAppBuilder app)
{
// Configure the db context and user manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
// Plugin the OAuth bearer JSON Web Token tokens generation and Consumption will be here
}
private void ConfigureWebApi(HttpConfiguration config)
{
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
}
這是我NinjectWebCommon類先進