У меня был существующий проект global.asax, в который я без проблем добавил nswag, следуя этому набору инструкций:
https://github.com/RSuter/NSwag/wiki/OwinGlobalAsax
Однако позже я настроил сервер oauth в том жепроект.В этом случае я добавил файл OwinStartup и отменил шаг # 2 в приведенной выше ссылке, установив для AutomaticAppStartup значение true:
<add key="owin:AutomaticAppStartup" value="true" /> <!--https://github.com/RSuter/NSwag/wiki/OwinGlobalAsax-->
Я успешно смог использовать свой oauth-сервер, но без значения AutomaticAppStartup, установленного наfalse, ссылка / Swagger просто возвращает 404. Я попытался переместить запуск swagger в метод OwinStartUp, но это также не сработало.
OwinStartup (swagger не работает):
public partial class OwinStartup
{
public void Configuration(IAppBuilder app)
{
//DOESN'T WORK
ConfigureSwagger(app);
//DOES WORK
ConfigureOAuth(app);
WebApiConfig.Register(new HttpConfiguration());
}
public void ConfigureSwagger(IAppBuilder app)
{
app.UseSwaggerUi(typeof(MvcApplication).Assembly, settings =>
{
//settings.GeneratorSettings.ActualSerializerSettings.Converters.Add(new HypermediaInjectorJsonConverter());
//settings.GeneratorSettings.ContractResolver = new HypermediaContractResolver();
settings.MiddlewareBasePath = "/swagger";
settings.GeneratorSettings.Title = "My API";
});
}
public static void ConfigureOAuth(IAppBuilder app)
{
//var secret = TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["secret"]);
var secret = Security.Secret;
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { Security.Audience },
IssuerSecurityKeyProviders = new IIssuerSecurityKeyProvider[]
{
new SymmetricKeyIssuerSecurityKeyProvider(CustomJwtFormat.Issuer, CustomJwtFormat.Secret)
}
});
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/oauth2/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = new CustomOAuthProvider(),
AccessTokenFormat = new CustomJwtFormat()
});
}
}
Global.asax (oauth не работает):
protected void Application_Start()
{
HypermediaConfig.Setup();
//DOES WORK!
RouteTable.Routes.MapOwinPath("swagger", app =>
{
OwinStartup.ConfigureSwagger(app);
});
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//DOESN'T WORK
RouteTable.Routes.MapOwinPath("oauth2", app =>
{
OwinStartup.ConfigureOAuth(app);
});
}
В настоящее время я нахожусь в процессе создания нового проекта owin, чтобы посмотреть, решит ли это проблему.Тем не менее, я все еще хотел бы разобраться в проблемах с приведенными выше случаями:
Почему nswag не работает (404) при инициализации через OwinStartup на веб-сайте global.asax?
И oauth не работает (404) при инициализации через global.asax?