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> |
<!DOCTYPE html> |
||||
<html lang="en"> |
<html lang="en"> |
||||
<head> |
<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