mirror of https://github.com/abpframework/abp.git
18 changed files with 96 additions and 337 deletions
@ -0,0 +1,24 @@ |
|||
using System; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Swashbuckle.AspNetCore.SwaggerUI; |
|||
using Volo.Abp.VirtualFileSystem; |
|||
|
|||
namespace Microsoft.AspNetCore.Builder |
|||
{ |
|||
public static class AbpSwaggerUIBuilderExtensions |
|||
{ |
|||
public static IApplicationBuilder UseAbpSwaggerUI( |
|||
this IApplicationBuilder app, |
|||
Action<SwaggerUIOptions> setupAction = null) |
|||
{ |
|||
var fileProvider = app.ApplicationServices.GetService<IVirtualFileProvider>(); |
|||
|
|||
return app.UseSwaggerUI(options => |
|||
{ |
|||
options.IndexStream = () => fileProvider.GetFileInfo("/wwwroot/swagger/ui/index.html").CreateReadStream(); |
|||
|
|||
setupAction?.Invoke(options); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.0</TargetFramework> |
|||
<AssemblyName>Volo.Abp.Swagger</AssemblyName> |
|||
<PackageId>Volo.Abp.Swagger</PackageId> |
|||
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> |
|||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.5.1" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<None Remove="wwwroot\swagger\ui\index.html" /> |
|||
<EmbeddedResource Include="wwwroot\swagger\ui\index.html" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Volo.Abp.VirtualFileSystem\Volo.Abp.VirtualFileSystem.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,17 @@ |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.VirtualFileSystem; |
|||
|
|||
namespace Volo.Abp |
|||
{ |
|||
[DependsOn(typeof(AbpVirtualFileSystemModule))] |
|||
public class AbpSwaggerModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(ServiceConfigurationContext context) |
|||
{ |
|||
Configure<AbpVirtualFileSystemOptions>(options => |
|||
{ |
|||
options.FileSets.AddEmbedded<AbpSwaggerModule>(); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -1,4 +1,4 @@ |
|||
<!-- HTML for static distribution bundle build --> |
|||
<!-- HTML for static distribution bundle build --> |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
@ -1,95 +0,0 @@ |
|||
<!-- HTML for static distribution bundle build --> |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<title>%(DocumentTitle)</title> |
|||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" |
|||
rel="stylesheet"> |
|||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css"> |
|||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32"/> |
|||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16"/> |
|||
<style> |
|||
html { |
|||
box-sizing: border-box; |
|||
overflow: -moz-scrollbars-vertical; |
|||
overflow-y: scroll; |
|||
} |
|||
|
|||
*, |
|||
*:before, |
|||
*:after { |
|||
box-sizing: inherit; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; |
|||
background: #fafafa; |
|||
} |
|||
</style> |
|||
%(HeadContent) |
|||
</head> |
|||
|
|||
<body> |
|||
|
|||
<div id="swagger-ui"></div> |
|||
|
|||
<!-- Workaround for https://github.com/swagger-api/swagger-editor/issues/1371 --> |
|||
<script> |
|||
if (window.navigator.userAgent.indexOf("Edge") > -1) { |
|||
console.log("Removing native Edge fetch in favor of swagger-ui's polyfill") |
|||
window.fetch = undefined; |
|||
} |
|||
</script> |
|||
|
|||
<script src="./swagger-ui-bundle.js"></script> |
|||
<script src="./swagger-ui-standalone-preset.js"></script> |
|||
<script src="/libs/abp/core/abp.js"></script> |
|||
|
|||
<script> |
|||
window.onload = function () { |
|||
var configObject = JSON.parse('%(ConfigObject)'); |
|||
var oauthConfigObject = JSON.parse('%(OAuthConfigObject)'); |
|||
|
|||
// Workaround for https://github.com/swagger-api/swagger-ui/issues/5945 |
|||
configObject.urls.forEach(function (item) { |
|||
if (item.url.startsWith("http") || item.url.startsWith("/")) return; |
|||
item.url = window.location.href.replace("index.html", item.url).split('#')[0]; |
|||
}); |
|||
|
|||
// If validatorUrl is not explicitly provided, disable the feature by setting to null |
|||
if (!configObject.hasOwnProperty("validatorUrl")) |
|||
configObject.validatorUrl = null |
|||
|
|||
// If oauth2RedirectUrl isn't specified, use the built-in default |
|||
if (!configObject.hasOwnProperty("oauth2RedirectUrl")) |
|||
configObject.oauth2RedirectUrl = window.location.href.replace("index.html", "oauth2-redirect.html").split('#')[0]; |
|||
|
|||
// Apply mandatory parameters |
|||
configObject.dom_id = "#swagger-ui"; |
|||
configObject.presets = [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset]; |
|||
configObject.layout = "StandaloneLayout"; |
|||
configObject.requestInterceptor = function (request) { |
|||
var token = abp.auth.getToken(); |
|||
request.headers.Authorization = token ? "Bearer " + token : null; |
|||
var antiForgeryToken = abp.security.antiForgery.getToken(); |
|||
if (antiForgeryToken) { |
|||
request.headers[abp.security.antiForgery.tokenHeaderName] = antiForgeryToken; |
|||
} |
|||
return request; |
|||
}; |
|||
|
|||
// Begin Swagger UI call region |
|||
|
|||
const ui = SwaggerUIBundle(configObject); |
|||
|
|||
ui.initOAuth(oauthConfigObject); |
|||
|
|||
// End Swagger UI call region |
|||
|
|||
window.ui = ui |
|||
} |
|||
</script> |
|||
</body> |
|||
|
|||
</html> |
|||
@ -1,95 +0,0 @@ |
|||
<!-- HTML for static distribution bundle build --> |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<title>%(DocumentTitle)</title> |
|||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" |
|||
rel="stylesheet"> |
|||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css"> |
|||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32"/> |
|||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16"/> |
|||
<style> |
|||
html { |
|||
box-sizing: border-box; |
|||
overflow: -moz-scrollbars-vertical; |
|||
overflow-y: scroll; |
|||
} |
|||
|
|||
*, |
|||
*:before, |
|||
*:after { |
|||
box-sizing: inherit; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; |
|||
background: #fafafa; |
|||
} |
|||
</style> |
|||
%(HeadContent) |
|||
</head> |
|||
|
|||
<body> |
|||
|
|||
<div id="swagger-ui"></div> |
|||
|
|||
<!-- Workaround for https://github.com/swagger-api/swagger-editor/issues/1371 --> |
|||
<script> |
|||
if (window.navigator.userAgent.indexOf("Edge") > -1) { |
|||
console.log("Removing native Edge fetch in favor of swagger-ui's polyfill") |
|||
window.fetch = undefined; |
|||
} |
|||
</script> |
|||
|
|||
<script src="./swagger-ui-bundle.js"></script> |
|||
<script src="./swagger-ui-standalone-preset.js"></script> |
|||
<script src="/libs/abp/core/abp.js"></script> |
|||
|
|||
<script> |
|||
window.onload = function () { |
|||
var configObject = JSON.parse('%(ConfigObject)'); |
|||
var oauthConfigObject = JSON.parse('%(OAuthConfigObject)'); |
|||
|
|||
// Workaround for https://github.com/swagger-api/swagger-ui/issues/5945 |
|||
configObject.urls.forEach(function (item) { |
|||
if (item.url.startsWith("http") || item.url.startsWith("/")) return; |
|||
item.url = window.location.href.replace("index.html", item.url).split('#')[0]; |
|||
}); |
|||
|
|||
// If validatorUrl is not explicitly provided, disable the feature by setting to null |
|||
if (!configObject.hasOwnProperty("validatorUrl")) |
|||
configObject.validatorUrl = null |
|||
|
|||
// If oauth2RedirectUrl isn't specified, use the built-in default |
|||
if (!configObject.hasOwnProperty("oauth2RedirectUrl")) |
|||
configObject.oauth2RedirectUrl = window.location.href.replace("index.html", "oauth2-redirect.html").split('#')[0]; |
|||
|
|||
// Apply mandatory parameters |
|||
configObject.dom_id = "#swagger-ui"; |
|||
configObject.presets = [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset]; |
|||
configObject.layout = "StandaloneLayout"; |
|||
configObject.requestInterceptor = function (request) { |
|||
var token = abp.auth.getToken(); |
|||
request.headers.Authorization = token ? "Bearer " + token : null; |
|||
var antiForgeryToken = abp.security.antiForgery.getToken(); |
|||
if (antiForgeryToken) { |
|||
request.headers[abp.security.antiForgery.tokenHeaderName] = antiForgeryToken; |
|||
} |
|||
return request; |
|||
}; |
|||
|
|||
// Begin Swagger UI call region |
|||
|
|||
const ui = SwaggerUIBundle(configObject); |
|||
|
|||
ui.initOAuth(oauthConfigObject); |
|||
|
|||
// End Swagger UI call region |
|||
|
|||
window.ui = ui |
|||
} |
|||
</script> |
|||
</body> |
|||
|
|||
</html> |
|||
@ -1,95 +0,0 @@ |
|||
<!-- HTML for static distribution bundle build --> |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<title>%(DocumentTitle)</title> |
|||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" |
|||
rel="stylesheet"> |
|||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css"> |
|||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32"/> |
|||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16"/> |
|||
<style> |
|||
html { |
|||
box-sizing: border-box; |
|||
overflow: -moz-scrollbars-vertical; |
|||
overflow-y: scroll; |
|||
} |
|||
|
|||
*, |
|||
*:before, |
|||
*:after { |
|||
box-sizing: inherit; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; |
|||
background: #fafafa; |
|||
} |
|||
</style> |
|||
%(HeadContent) |
|||
</head> |
|||
|
|||
<body> |
|||
|
|||
<div id="swagger-ui"></div> |
|||
|
|||
<!-- Workaround for https://github.com/swagger-api/swagger-editor/issues/1371 --> |
|||
<script> |
|||
if (window.navigator.userAgent.indexOf("Edge") > -1) { |
|||
console.log("Removing native Edge fetch in favor of swagger-ui's polyfill") |
|||
window.fetch = undefined; |
|||
} |
|||
</script> |
|||
|
|||
<script src="./swagger-ui-bundle.js"></script> |
|||
<script src="./swagger-ui-standalone-preset.js"></script> |
|||
<script src="/libs/abp/core/abp.js"></script> |
|||
|
|||
<script> |
|||
window.onload = function () { |
|||
var configObject = JSON.parse('%(ConfigObject)'); |
|||
var oauthConfigObject = JSON.parse('%(OAuthConfigObject)'); |
|||
|
|||
// Workaround for https://github.com/swagger-api/swagger-ui/issues/5945 |
|||
configObject.urls.forEach(function (item) { |
|||
if (item.url.startsWith("http") || item.url.startsWith("/")) return; |
|||
item.url = window.location.href.replace("index.html", item.url).split('#')[0]; |
|||
}); |
|||
|
|||
// If validatorUrl is not explicitly provided, disable the feature by setting to null |
|||
if (!configObject.hasOwnProperty("validatorUrl")) |
|||
configObject.validatorUrl = null |
|||
|
|||
// If oauth2RedirectUrl isn't specified, use the built-in default |
|||
if (!configObject.hasOwnProperty("oauth2RedirectUrl")) |
|||
configObject.oauth2RedirectUrl = window.location.href.replace("index.html", "oauth2-redirect.html").split('#')[0]; |
|||
|
|||
// Apply mandatory parameters |
|||
configObject.dom_id = "#swagger-ui"; |
|||
configObject.presets = [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset]; |
|||
configObject.layout = "StandaloneLayout"; |
|||
configObject.requestInterceptor = function (request) { |
|||
var token = abp.auth.getToken(); |
|||
request.headers.Authorization = token ? "Bearer " + token : null; |
|||
var antiForgeryToken = abp.security.antiForgery.getToken(); |
|||
if (antiForgeryToken) { |
|||
request.headers[abp.security.antiForgery.tokenHeaderName] = antiForgeryToken; |
|||
} |
|||
return request; |
|||
}; |
|||
|
|||
// Begin Swagger UI call region |
|||
|
|||
const ui = SwaggerUIBundle(configObject); |
|||
|
|||
ui.initOAuth(oauthConfigObject); |
|||
|
|||
// End Swagger UI call region |
|||
|
|||
window.ui = ui |
|||
} |
|||
</script> |
|||
</body> |
|||
|
|||
</html> |
|||
Loading…
Reference in new issue