我有一个自托管的asp.net web api。我有几个API工作正常。所有要求都达到API方法并且响应客户。 现在我尝试为web-api添加授权。CreatePerOwinContext在owin自我托管的web-api中导致404响应
我通过添加AUTH SECTION来更改我的启动配置。
static void Main(string[] args)
{
StartOptions startOptions = new StartOptions();
startOptions.Urls.Add("https://*:44305/");
startOptions.Urls.Add("http://*:9001/");
using (Microsoft.Owin.Hosting.WebApp.Start<dobStartUp>(startOptions))
{
//...
}
}
public class dobStartUp
{
public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }
public static string PublicClientId { get; private set; }
public void Configuration(IAppBuilder app)
{
//----AUTH SECTION---
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
// PublicClientId = "self";
// OAuthOptions = new OAuthAuthorizationServerOptions
// {
// TokenEndpointPath = new PathString("/Token"),
// Provider = new ApplicationOAuthProvider(PublicClientId),
// AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
// AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
// AllowInsecureHttp = true
// };
// app.UseOAuthBearerTokens(OAuthOptions);
//-------------
var config = new HttpConfiguration();
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.Services.Replace(typeof(IAssembliesResolver),new dobAssembliesResolver());
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.JsonFormatter.SerializerSettings = new Newtonsoft.Json.JsonSerializerSettings();
// config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new Common.dobJsonContractResolver();
var container = new UnityContainer();
container.RegisterType<IdobRDBRepository, dobRDBRepository>(new TransientLifetimeManager());
container.RegisterType<IResourcesContentRepository, AS3ContentRepository>(new TransientLifetimeManager());
SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing();
traceWriter.IsVerbose = false;
traceWriter.MinimumLevel = TraceLevel.Debug;
config.DependencyResolver = new UnityDependencyResolver(container);
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
}
}
当我在AUTH-部分使用app.CreatePerOwinContext,方法可以创建appDbContext和appUserManager被调用,但我对每个API方法404个responces。当我不这样调用这些CreatePerOwinContext方法时,每个工作都照常进行。我知道我可以使用IoC容器来创建dbContext和userManager的实例,但是我想了解我的app.CreatePerOwinContext和404响应的当前问题。 预先感谢大家。
我不确定你的解决方案是什么。你可以粘贴你的新代码吗?谢谢! – Matt 2015-01-25 02:00:16