我的 Blazor 服务器端应用程序使用 Azure B2C 进行身份验证。注销后,用户将被重定向到通知注销成功的通用页面。如何使应用程序重定向到主页(即登录页面)?
这是我的身份验证的一部分:
<AuthorizeView>
<Authorized>
@if (canEditProfile)
{
<a href="MicrosoftIdentity/Account/EditProfile" style="color: white">Hello, @context.User.Identity.Name!</a>
}
else
{
<span style="color: white">Hello, @context.User.Identity.Name!</span>
}
<a href="MicrosoftIdentity/Account/SignOut" style="color: white">Log out</a>
</Authorized>
<NotAuthorized>
<a href="MicrosoftIdentity/Account/SignIn" style="color: white">Log in</a>
</NotAuthorized>
</AuthorizeView>
Run Code Online (Sandbox Code Playgroud) 我有一个 .js 文件,其中包含以下 JavaScript 代码:
<script>
abc= window.abc|| {};
abc.Metrics = abc.Metrics || {};
abc.Metrics.sc = abc.Metrics.sc || {};
abc.Metrics.sc.country = "us"; /***dynamic value based on site***/
abc.Metrics.sc.language = "en"; /***dynamic value based on site***/
abc.Metrics.sc.segment = "corp"; /***dynamic value based on site***/
abc.Metrics.sc.customerset = "19"; /***dynamic value based on site***/
abc.Metrics.sc.cms = "stp"; /***dynamic value based on site***/
abc.Metrics.sc.pagename = "pname"; /***relevant unique page name***/
abc.Metrics.sc.applicationname = "Browse:Product Detail";
</script>
<!-- Refer the below script in DEV -->
<script …Run Code Online (Sandbox Code Playgroud) 大家好! 我正在尝试在 Blazor WebAssembly 应用程序中创建自定义身份验证模式(这是工作室创建 3 个项目的地方 - 客户端、服务器、共享)。想法是避免 IS4 auth 并让我的 oun “内部”用户用于测试目的并了解 auth mech 的工作。我是通过创建自定义 AuthenticationStateProvider 来做到这一点的吗?就像官方文档中显示的那样。这是我的 AuthenticationStateProvider 类:
public class CustomAuthStateProvider : AuthenticationStateProvider
{
private bool _isLoggedIn = true;
//this is a parameter defininng whether user logged in or not
//changed by reflection
public bool IsLoggedIn
{
get
{
return _isLoggedIn;
}
set
{
_isLoggedIn = value;
NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
}
}
private static CustomAuthStateProvider _myInstance = null;
public Serilog.ILogger _logger { get; set; }
public override …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-core asp.net-core-webapi blazor blazor-server-side
我正在学习 Blazor 和 C#(两者都是新的),并且正在玩我的一个宠物项目。
对于该项目,我编写了一个Project.cs文件,位于按照本Data教程创建的结构的目录中。
在某些时候,我需要一个字典数据结构,我尝试在类中创建这样的数据结构:
namespace MyApp.Data;
public class Project
{
public Project()
{
}
Dictionary<string, string> openWith =
new Dictionary<string, string>();
// Add some elements to the dictionary. There are no
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
}
Run Code Online (Sandbox Code Playgroud)
但是当我直接Invalid token '(' in class, record, struct, or interface member declaration从 Microsoft文档中获取这些行时,我收到了错误
我究竟做错了什么 ?
我的应用程序将组件列表上传到我们的 ERP 中。上传过程可能需要 1 或 2 分钟。我想实时通知用户发生了什么。
我创建了一个 Blazor 服务器应用程序。我有带有一些 UI 逻辑的 razor 页面,但我不想将所有处理逻辑放在 razor 页面内。所以我把它放到了一个工人身上。
工作人员如何将通知推送到 blazor 组件?
我对 SignalR 很感兴趣,但它们主要是关于 Blazor WebAssembly 的,或者对我来说太基础了,无法了解如何将其应用到我的情况中。
我想知道什么是好方法?
我创建了一个新的 blazor 服务器应用程序(Visual studio for Mac 中的默认 Microsoft 示例模板)。然后在 Page 文件夹中,我创建了一个新的子文件夹“Test”。在子文件夹“Test”中,我创建了以下文件:
_Imports.razor
@layout TestTemplate
Run Code Online (Sandbox Code Playgroud)
测试模板.razor
@inherits LayoutComponentBase
<h1>Test layout</h1>
@Body
Run Code Online (Sandbox Code Playgroud)
索引剃刀
@page "/test"
<h3>Hello test layout</h3>
@code {
}
Run Code Online (Sandbox Code Playgroud)
当我构建解决方案时,没有发现错误。但是当我打开浏览器并访问 URL http://localhost:portnr/test 时,我的浏览器会继续渲染/挂起(我认为是无限循环)。
根据 Microsoft https://learn.microsoft.com/en-us/aspnet/core/blazor/components/layouts?view=aspnetcore-6.0的文档,上述步骤应该有效(请参阅“将布局应用于文件夹”部分) 。
我检查了项目根目录下的 _Imports.razor 文件,看看是否有其他对 @layout 的引用,因为根据上面的链接,这将导致无限循环。App.razor 包含对 MainLayout 的引用:
<Router AppAssembly="@typeof(App).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
<FocusOnNavigate RouteData="@routeData" Selector="h1" />
</Found>
<NotFound>
<PageTitle>Not found</PageTitle>
<LayoutView Layout="@typeof(MainLayout)">
<p role="alert">Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
Run Code Online (Sandbox Code Playgroud) Index.razor.cs:
我正在开发一个网格组件,它将显示一个项目列表:
<Grid Items="Transactions">
<GridHeader>
<GridColumn TItem="Transaction">ID</GridColumn>
<GridColumn TItem="Transaction">Date</GridColumn>
</GridHeader>
</Grid>
Run Code Online (Sandbox Code Playgroud)
然后在 Grid.razor.cs 和 GridColumn.razor.cs 中我使用 typeparam TItem。但似乎我需要将 TITem 作为每个网格列中的参数传递,我该如何实现对类似以下内容的支持:
<Grid Items="Transactions" TItem="Transaction">
<GridHeader>
<GridColumn>ID</GridColumn>
<GridColumn>Date</GridColumn>
</GridHeader>
</Grid>
Run Code Online (Sandbox Code Playgroud)
因此,TItem 会级联到所有子组件(无论它们嵌套的深度如何)
我查看了 CascadingTypeParam 但有关它的信息很少,所以我不确定如果它是上述解决方案,如何使用它。
单击覆盖层(对话框外部)时是否可以防止关闭 MudBlazor 对话框?或者在单击覆盖层时运行任务?
我有一个名为BusinessUnit的对象,该对象包含子业务单位的列表,并且我需要一个函数来为其父项下的每个子项提供<li>元素。我到目前为止的代码如下:
<ul id="Level0">
@foreach (var bizUnit in businessUnitViewModel.BusinessUnitInfos)
{
<li>
<span>@bizUnit.BusinessUnitName</span>
<ul class="nested">
@foreach (var childOfbizUnit in bizUnit.Children)
{
<li>@childOfbizUnit.BusinessUnitName</li>
}
</ul>
</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
嵌套的foreach与第一个嵌套的foreach基本相同,但是对其进行硬编码会限制我可以拥有的层次结构级别。我需要这样的功能:
public void HasKids(BusinessUnitInfo bizUnit)
{
foreach (var bizUnitChild in bizUnit.Children)
{
//Render an <li> tag element with bizUnitChild's
name<li>bizUnitChild.Name</li>
HasKids(bizUnitChild);
}
}
Run Code Online (Sandbox Code Playgroud)
是否有人知道我可以在最后一个代码块中为注释做些什么?如何使用C#代码动态呈现列表标记?坦:)
我想在每次单击按钮时通过动态添加其他 blazor 组件来更新视图。我怎样才能做到这一点。
例如:每次单击组件 1 上的按钮时,应立即将组件 2 添加到组件 1 中。
blazor ×9
c# ×2
asp.net ×1
asp.net-core ×1
azure-ad-b2c ×1
mudblazor ×1
mvvm ×1
razor ×1
signalr ×1