mirror of https://github.com/abpframework/abp.git
18 changed files with 426 additions and 2 deletions
@ -0,0 +1,32 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk.Web"> |
||||
|
|
||||
|
<Import Project="..\..\common.props" /> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFramework>netstandard2.1</TargetFramework> |
||||
|
<RazorLangVersion>3.0</RazorLangVersion> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="Blazorise.Bootstrap" Version="0.9.1.2" /> |
||||
|
<PackageReference Include="Blazorise.Icons.FontAwesome" Version="0.9.1.2" /> |
||||
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" /> |
||||
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="3.2.1" PrivateAssets="all" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Autofac.WebAssembly\Volo.Abp.Autofac.WebAssembly.csproj" /> |
||||
|
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme\Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\..\..\..\..\modules\identity\src\Volo.Abp.Identity.Blazor\Volo.Abp.Identity.Blazor.csproj" /> |
||||
|
<ProjectReference Include="..\..\..\..\..\modules\account\src\Volo.Abp.Account.Blazor\Volo.Abp.Account.Blazor.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\MyCompanyName.MyProjectName.Host.Shared\MyCompanyName.MyProjectName.Host.Shared.csproj" /> |
||||
|
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.Blazor\MyCompanyName.MyProjectName.Blazor.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
||||
@ -0,0 +1,12 @@ |
|||||
|
using AutoMapper; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName.Blazor.Host |
||||
|
{ |
||||
|
public class MyProjectNameBlazorHostAutoMapperProfile : Profile |
||||
|
{ |
||||
|
public MyProjectNameBlazorHostAutoMapperProfile() |
||||
|
{ |
||||
|
//Define your AutoMapper configuration here for the Blazor project.
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,106 @@ |
|||||
|
using System; |
||||
|
using System.Net.Http; |
||||
|
using Blazorise; |
||||
|
using Blazorise.Bootstrap; |
||||
|
using Blazorise.Icons.FontAwesome; |
||||
|
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Account.Blazor; |
||||
|
using Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme; |
||||
|
using Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic; |
||||
|
using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing; |
||||
|
using Volo.Abp.Autofac.WebAssembly; |
||||
|
using Volo.Abp.AutoMapper; |
||||
|
using Volo.Abp.Identity.Blazor; |
||||
|
using Volo.Abp.Modularity; |
||||
|
using Volo.Abp.UI.Navigation; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName.Blazor.Host |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(AbpAutofacWebAssemblyModule), |
||||
|
typeof(AbpAspNetCoreComponentsWebAssemblyBasicThemeModule), |
||||
|
typeof(AbpIdentityBlazorModule), |
||||
|
typeof(AbpAccountBlazorModule), |
||||
|
typeof(MyProjectNameBlazorModule) |
||||
|
)] |
||||
|
public class MyProjectNameBlazorHostModule : AbpModule |
||||
|
{ |
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
var environment = context.Services.GetSingletonInstance<IWebAssemblyHostEnvironment>(); |
||||
|
var builder = context.Services.GetSingletonInstance<WebAssemblyHostBuilder>(); |
||||
|
|
||||
|
ConfigureAuthentication(builder); |
||||
|
ConfigureHttpClient(context, environment); |
||||
|
ConfigureBlazorise(context); |
||||
|
ConfigureRouter(context); |
||||
|
ConfigureUI(builder); |
||||
|
ConfigureMenu(context); |
||||
|
ConfigureAutoMapper(context); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureRouter(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
Configure<AbpRouterOptions>(options => |
||||
|
{ |
||||
|
options.AppAssembly = typeof(MyProjectNameBlazorHostModule).Assembly; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureMenu(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
Configure<AbpNavigationOptions>(options => |
||||
|
{ |
||||
|
options.MenuContributors.Add(new MyProjectNameHostMenuContributor()); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureBlazorise(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
context.Services |
||||
|
.AddBlazorise() |
||||
|
.AddBootstrapProviders() |
||||
|
.AddFontAwesomeIcons(); |
||||
|
} |
||||
|
|
||||
|
private static void ConfigureAuthentication(WebAssemblyHostBuilder builder) |
||||
|
{ |
||||
|
builder.Services.AddOidcAuthentication(options => |
||||
|
{ |
||||
|
builder.Configuration.Bind("AuthServer", options.ProviderOptions); |
||||
|
options.ProviderOptions.DefaultScopes.Add("MyProjectName"); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private static void ConfigureUI(WebAssemblyHostBuilder builder) |
||||
|
{ |
||||
|
builder.RootComponents.Add<App>("app"); |
||||
|
} |
||||
|
|
||||
|
private static void ConfigureHttpClient(ServiceConfigurationContext context, IWebAssemblyHostEnvironment environment) |
||||
|
{ |
||||
|
context.Services.AddTransient(sp => new HttpClient |
||||
|
{ |
||||
|
BaseAddress = new Uri(environment.BaseAddress) |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureAutoMapper(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
Configure<AbpAutoMapperOptions>(options => |
||||
|
{ |
||||
|
options.AddMaps<MyProjectNameBlazorHostModule>(); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
context.ServiceProvider |
||||
|
.UseBootstrapProviders() |
||||
|
.UseFontAwesomeIcons(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
using Volo.Abp.Ui.Branding; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName.Blazor.Host |
||||
|
{ |
||||
|
public class MyProjectNameHostBrandingProvider : DefaultBrandingProvider |
||||
|
{ |
||||
|
public override string AppName => "MyProjectName"; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,31 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using MyCompanyName.MyProjectName.Localization; |
||||
|
using Volo.Abp.UI.Navigation; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName.Blazor.Host |
||||
|
{ |
||||
|
public class MyProjectNameHostMenuContributor : IMenuContributor |
||||
|
{ |
||||
|
public Task ConfigureMenuAsync(MenuConfigurationContext context) |
||||
|
{ |
||||
|
if(context.Menu.DisplayName != StandardMenus.Main) |
||||
|
{ |
||||
|
return Task.CompletedTask; |
||||
|
} |
||||
|
|
||||
|
var l = context.GetLocalizer<MyProjectNameResource>(); |
||||
|
|
||||
|
context.Menu.Items.Insert( |
||||
|
0, |
||||
|
new ApplicationMenuItem( |
||||
|
"MyProjectName.Home", |
||||
|
l["Menu:Home"], |
||||
|
"/", |
||||
|
icon: "fas fa-home" |
||||
|
) |
||||
|
); |
||||
|
|
||||
|
return Task.CompletedTask; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,60 @@ |
|||||
|
@page "/" |
||||
|
@using Volo.Abp.Users |
||||
|
@using Volo.Abp.MultiTenancy |
||||
|
@using System.Security.Claims |
||||
|
@inject ICurrentUser CurrentUser |
||||
|
@inject ICurrentTenant CurrentTenant |
||||
|
@inject AuthenticationStateProvider AuthenticationStateProvider |
||||
|
|
||||
|
<h1>Welcome to MyProjectName!</h1> |
||||
|
|
||||
|
@if (CurrentUser.IsAuthenticated) |
||||
|
{ |
||||
|
<h3>Current User</h3> |
||||
|
<ul> |
||||
|
<li>Id: <strong>@CurrentUser.Id</strong></li> |
||||
|
<li>TenantId: <strong>@CurrentUser.TenantId</strong></li> |
||||
|
<li>UserName: <strong>@CurrentUser.UserName</strong></li> |
||||
|
<li>Name: <strong>@CurrentUser.Name</strong></li> |
||||
|
<li>SurName: <strong>@CurrentUser.SurName</strong></li> |
||||
|
<li>Email: <strong>@CurrentUser.Email</strong></li> |
||||
|
<li>EmailVerified: <strong>@CurrentUser.EmailVerified</strong></li> |
||||
|
<li>PhoneNumber: <strong>@CurrentUser.PhoneNumber</strong></li> |
||||
|
<li>PhoneNumberVerified: <strong>@CurrentUser.PhoneNumberVerified</strong></li> |
||||
|
<li>Roles: <strong>@CurrentUser.Roles.JoinAsString(", ")</strong></li> |
||||
|
</ul> |
||||
|
} |
||||
|
|
||||
|
@if (_claims != null) |
||||
|
{ |
||||
|
<h3>Current Claims</h3> |
||||
|
<ul> |
||||
|
@foreach (var claim in _claims) |
||||
|
{ |
||||
|
<li>@claim.Type: @claim.Value</li> |
||||
|
} |
||||
|
</ul> |
||||
|
} |
||||
|
|
||||
|
@if (CurrentTenant.IsAvailable) |
||||
|
{ |
||||
|
<h3>Current Tenant</h3> |
||||
|
<ul> |
||||
|
<li>Id: <strong>@CurrentTenant.Id</strong></li> |
||||
|
<li>Name: <strong>@CurrentTenant.Name</strong></li> |
||||
|
</ul> |
||||
|
} |
||||
|
|
||||
|
@code |
||||
|
{ |
||||
|
private IEnumerable<Claim> _claims; |
||||
|
|
||||
|
protected override async Task OnInitializedAsync() |
||||
|
{ |
||||
|
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); |
||||
|
if (authState.User.Identity.IsAuthenticated) |
||||
|
{ |
||||
|
_claims = authState.User.Claims; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName.Blazor.Host |
||||
|
{ |
||||
|
public class Program |
||||
|
{ |
||||
|
public static async Task Main(string[] args) |
||||
|
{ |
||||
|
var builder = WebAssemblyHostBuilder.CreateDefault(args); |
||||
|
|
||||
|
var application = builder.AddApplication<MyProjectNameBlazorHostModule>(options => |
||||
|
{ |
||||
|
options.UseAutofac(); |
||||
|
}); |
||||
|
|
||||
|
var host = builder.Build(); |
||||
|
|
||||
|
await application.InitializeAsync(host.Services); |
||||
|
|
||||
|
await host.RunAsync(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,29 @@ |
|||||
|
{ |
||||
|
"iisSettings": { |
||||
|
"windowsAuthentication": false, |
||||
|
"anonymousAuthentication": true, |
||||
|
"iisExpress": { |
||||
|
"applicationUrl": "https://localhost:44307", |
||||
|
"sslPort": 44307 |
||||
|
} |
||||
|
}, |
||||
|
"profiles": { |
||||
|
"IIS Express": { |
||||
|
"commandName": "IISExpress", |
||||
|
"launchBrowser": true, |
||||
|
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
} |
||||
|
}, |
||||
|
"MyCompanyName.MyProjectName.Blazor": { |
||||
|
"commandName": "Project", |
||||
|
"launchBrowser": true, |
||||
|
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", |
||||
|
"applicationUrl": "https://localhost:44307", |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
@using System.Net.Http |
||||
|
@using Microsoft.AspNetCore.Components.Authorization |
||||
|
@using Microsoft.AspNetCore.Components.Forms |
||||
|
@using Microsoft.AspNetCore.Components.Routing |
||||
|
@using Microsoft.AspNetCore.Components.Web |
||||
|
@using Microsoft.AspNetCore.Components.WebAssembly.Http |
||||
|
@using Microsoft.JSInterop |
||||
|
@using Volo.Abp.AspNetCore.Components.WebAssembly |
||||
|
@using MyCompanyName.MyProjectName.Blazor |
||||
|
@using Blazorise |
||||
|
@using Blazorise.DataGrid |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,12 @@ |
|||||
|
{ |
||||
|
"AuthServer": { |
||||
|
"Authority": "https://localhost:44301", |
||||
|
"ClientId": "MyProjectName_Blazor", |
||||
|
"ResponseType": "code" |
||||
|
}, |
||||
|
"RemoteServices": { |
||||
|
"Default": { |
||||
|
"BaseUrl": "https://localhost:44300" |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
After Width: | Height: | Size: 31 KiB |
@ -0,0 +1,39 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
|
||||
|
<head> |
||||
|
<meta charset="utf-8" /> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> |
||||
|
<title>MyCompanyName.MyProjectName.Blazor</title> |
||||
|
<base href="/" /> |
||||
|
|
||||
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> |
||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.12.0/css/all.css"> |
||||
|
|
||||
|
<link href="_content/Blazorise/blazorise.css" rel="stylesheet" /> |
||||
|
<link href="_content/Blazorise.Bootstrap/blazorise.bootstrap.css" rel="stylesheet" /> |
||||
|
<link href="_content/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/theme.css" rel="stylesheet" /> |
||||
|
<link href="main.css" rel="stylesheet" /> |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<app>Loading...</app> |
||||
|
|
||||
|
<div id="blazor-error-ui"> |
||||
|
An unhandled error has occurred. |
||||
|
<a href="" class="reload">Reload</a> |
||||
|
<a class="dismiss">🗙</a> |
||||
|
</div> |
||||
|
<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"></script> |
||||
|
<script src="_framework/blazor.webassembly.js"></script> |
||||
|
|
||||
|
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> |
||||
|
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> |
||||
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> |
||||
|
|
||||
|
<script src="_content/Blazorise/blazorise.js"></script> |
||||
|
<script src="_content/Blazorise.Bootstrap/blazorise.bootstrap.js"></script> |
||||
|
<script src="_content/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/theme.js"></script> |
||||
|
</body> |
||||
|
|
||||
|
</html> |
||||
@ -0,0 +1,18 @@ |
|||||
|
#blazor-error-ui { |
||||
|
background: lightyellow; |
||||
|
bottom: 0; |
||||
|
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); |
||||
|
display: none; |
||||
|
left: 0; |
||||
|
padding: 0.6rem 1.25rem 0.7rem 1.25rem; |
||||
|
position: fixed; |
||||
|
width: 100%; |
||||
|
z-index: 1000; |
||||
|
} |
||||
|
|
||||
|
#blazor-error-ui .dismiss { |
||||
|
cursor: pointer; |
||||
|
position: absolute; |
||||
|
right: 0.75rem; |
||||
|
top: 0.5rem; |
||||
|
} |
||||
@ -0,0 +1,27 @@ |
|||||
|
{ |
||||
|
"iisSettings": { |
||||
|
"windowsAuthentication": false, |
||||
|
"anonymousAuthentication": true, |
||||
|
"iisExpress": { |
||||
|
"applicationUrl": "http://localhost:64779/", |
||||
|
"sslPort": 44326 |
||||
|
} |
||||
|
}, |
||||
|
"profiles": { |
||||
|
"IIS Express": { |
||||
|
"commandName": "IISExpress", |
||||
|
"launchBrowser": true, |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
} |
||||
|
}, |
||||
|
"MyCompanyName.MyProjectName.Web": { |
||||
|
"commandName": "Project", |
||||
|
"launchBrowser": true, |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
}, |
||||
|
"applicationUrl": "https://localhost:5001;http://localhost:5000" |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue