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