标签: blazor-server-side

如何显示 razor 文件中的 pdf 文件内容

我从 word 创建了一个文档文件并导出为 pdf 。我想在 razor 页面的 Div 元素内显示 pdf 内容。如何显示 razor 页面中的 pdf 内容。请您提供一个示例代码如何在 blazor 服务器端显示

pdf asp.net-core blazor-server-side

2
推荐指数
1
解决办法
2万
查看次数

如何在 Blazor 中使用 Azure 应用程序配置中的功能标记?

我尝试在 Blazor 应用程序中使用 Azure 应用程序配置中的功能标志。我一直在关注Microsoft 的文档来添加它们。我可以通过将 FeatureManager 注入到我的代码部分并利用 .cshtml 文件中的功能标签来成功地使用它们,如下所示,

<feature name="Beta">
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="" asp-controller="Beta" asp-action="Index">Beta</a>
    </li>
</feature>
Run Code Online (Sandbox Code Playgroud)

但是,我无法在 .razor 文件中成功使用功能标签。这是由于无法将此指令添加到我的文件中造成的。

@addTagHelper *, Microsoft.FeatureManagement.AspNetCore

Run Code Online (Sandbox Code Playgroud)

有没有办法在我的 Razor 文件中使用功能标签?

blazor blazor-server-side azure-app-configuration

2
推荐指数
1
解决办法
876
查看次数

如何使用 AzureAD 和 Microsoft.Identity.Web 在 Blazor Server 中调用“SignOut”?

我有一个 Blazor 服务器应用程序 (.net5),它使用 Microsoft.Identity.Web 将用户登录到 AzureAD。这部分一切按预期工作 - 加载应用程序,它会自动获取“Microsoft Signin”对话框。AuthenticationStateTask 还将用户显示为“IsAuthenticated”。我的问题是尝试添加“注销”按钮。

我努力了:

<a href="https://login.microsoftonline.com/common/oauth2/v2.0/logout">Log out</a>
Run Code Online (Sandbox Code Playgroud)

和:

<a href="https://login.microsoftonline.com/{domainID}/oauth2/logout">Log Out</a>
Run Code Online (Sandbox Code Playgroud)

两者都会将我带到 Microsoft“请稍候,我们将您注销”页面,唯一的区别是第一个选项要求“从哪个帐户”注销。在浏览器中按“返回”或再次手动转到站点地址,我会自动以以前的用户身份重新登录。如果我按“注销”,然后手动转到:

/signout-oidc
Run Code Online (Sandbox Code Playgroud)

我得到一个空白页面(我理解是正确的),但然后返回到 Wep 应用程序,我被正确地要求再次登录 - 所以我的假设是回调不会被自动调用。

在我的 appsettings.json 中,我有:

"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc",
"RemoteSignOutPath": "/signout-oidc",
Run Code Online (Sandbox Code Playgroud)

以及域和租户等。

在 Azure Web 注册中,我在“前端通道注销 URL”字段中有 /signout-oidc。

我一定错过了一些东西(或者调用了错误的网址?),但是经过几个小时的研究,我无法解决它。

对此的任何帮助将不胜感激,谢谢。

azure-active-directory blazor-server-side

2
推荐指数
1
解决办法
6626
查看次数

将 Swagger UI 嵌入 Blazor 服务器端应用程序

我想将 swagger UI 嵌入到我的 blazor 应用程序的页面中。我很难找到如何使用剃刀页面执行此操作的示例。有人有这样做的例子吗?我通常是一名后端开发人员,所以在启动和运行这个前端方面有点困难。

rest c#-5.0 swagger-ui blazor-server-side

2
推荐指数
1
解决办法
4076
查看次数

用户登录后如何在 Blazor 服务器端应用程序中检索用户声明?

我有 Blazor 服务器应用程序和AD B2C身份验证。我已经配置了 Azure 并且该应用程序工作正常。我还可以使用以下代码查看声明。

<AuthorizeView>
    <Authorized>
        <table style="border: 1px solid black;">
            <tr style="border: 1px solid black; padding: 2px;">
                <th style="border: 1px solid black; padding: 2px;">Claim Type</th>
                <th style="border: 1px solid black; padding: 2px;">Value</th>
            </tr>

            @foreach (var item in context.User.Claims)
            {
                <tr style="border: 1px solid black; padding: 2px;">
                    <td style="border: 1px solid black; padding: 2px;">@item.Type</td>
                    <td style="border: 1px solid black; padding: 2px;">@item.Value</td>
                </tr>
            }
        </table>
    </Authorized>
</AuthorizeView>
Run Code Online (Sandbox Code Playgroud)

我想访问C# 类(而不是 razor 文件)中的用户声明并保存在数据库中。我怎样才能做到这一点?声明是否存储在像HttpContext这样的全局对象中,我可以从中检索这些声明?

azure-ad-b2c blazor-server-side

2
推荐指数
1
解决办法
2946
查看次数

是否可以将导出的 JavaScript 模块类导入为 Blazor 中的互操作类?

在最新的 Visual Studio 2019 中为我的 Blazor 服务器端解决方案创建 Razor 类库时,我看到以下文件:

ExampleJsInterop.cs

    public class ExampleJsInterop : IAsyncDisposable
    {
        private readonly Lazy<Task<IJSObjectReference>> moduleTask;

        public ExampleJsInterop(IJSRuntime jsRuntime)
        {
            moduleTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
               "import", "./_content/MyNamespace/exampleJsInterop.js").AsTask());
        }

        public async ValueTask<string> Prompt(string message)
        {
            var module = await moduleTask.Value;
            return await module.InvokeAsync<string>("showPrompt", message);
        }

        public async ValueTask DisposeAsync()
        {
            if (moduleTask.IsValueCreated)
            {
                var module = await moduleTask.Value;
                await module.DisposeAsync();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

exampleJsInterop.js

// This is a JavaScript module that is loaded on demand. It can …
Run Code Online (Sandbox Code Playgroud)

javascript c# blazor blazor-server-side

2
推荐指数
1
解决办法
1637
查看次数

将表单数据发布到 Blazor razor 组件 (application/x-www-form-urlencoded)

我刚刚开始学习 Blazor,所以如果问题很奇怪,请耐心等待。

是否可以将数据作为内容类型“application/x-www-form-urlencoded”发布到 Blazor razor 组件,以便在浏览器中打开页面时,它将显示调用者提供的初始值?当使用查询字符串并使用 HTTP GET 方法并在 navigationManager 的帮助下调用 razor 组件 url 时,它效果很好。在这种情况下,我无法更改数据的发送方式。我需要能够使用内容类型 application/x-www-form-urlencoded 处理 HTTP POST 调用,并且主体提供初始值作为 key=value。加载页面时,数据应显示在屏幕上。然后应该在页面上为用户提供一些选项,并通过单击按钮进行选择。

如果这不可能,那么满足此特定要求的正确方法是什么,即无法更改数据的发送方式(必须是内容类型为 application/x-www-form-urlencoded 的 HTTP POST)并且接收应用程序为 Blazor。

更新:Blazor 应用程序最好是服务器端的,但如果需要,可以更改为 Web 程序集(客户端)。

asp.net-core blazor blazor-server-side asp.net-blazor blazor-webassembly

2
推荐指数
1
解决办法
8508
查看次数

HttpContext.User.Claims 与 JWT 令牌不匹配 - “Sub”更改为“NameIdentifier”

我遇到以下情况,非常感谢任何帮助:

我在用户界面(Blazor 服务器应用程序)中使用 JSON Web 令牌 (jwtbearer) 进行身份验证和授权,以访问我的 Web API (Asp.net core 5.0)。

我尝试从通过 UserId 过滤的 API 返回数据(在创建令牌时我也将其添加为 NameIdentifier)。ClaimsPrincipal然后我注意到,点击控制器时返回的声明ControllerBase.User与我的令牌不同。

我有两项NameIdentifier索赔,但缺少“sub”。相反,看起来 sub 已更改为第二个NameIdentifier

调试屏幕截图 - 控制器中 this.User 的声明

但是,当我随请求发送时,令牌的有效负载看起来是正确的。这是我的令牌的有效负载:

{
  "sub": "admin@caliprog.com",
  "jti": "15c23576-9f5b-4f81-a985-ab236830c7b5",
  "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "9b437d6c-8fb8-455d-87f5-986d36b26dcf",
  "http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "Administrator",
  "exp": 1625472724,
  "iss": "test.com",
  "aud": "test.com"
}
Run Code Online (Sandbox Code Playgroud)

显然我在某个地方犯了错误,但我不知道错误出在哪里。如果有人能指出我的方向,那就太好了。我很高兴自己做更多研究,但我不知道从哪里开始。

以下是一些可能相关的代码部分,如果我遗漏了任何重要的内容,请告诉我:

我的 GetRequest(它有效,但我很想替换this.User.Claims.ToList()[2].Valuevar userId = this.User.FindFirst(ClaimTypes.NameIdentifier).Value;

    [HttpGet]
    public async Task<IActionResult> GetWorkouts()
    {
        try
        {
            _logger.LogInfo(LogMessages.AttemptMsg, ControllerContext);

            var userId = this.User.Claims.ToList()[2].Value;
            var workouts …
Run Code Online (Sandbox Code Playgroud)

c# jwt asp.net-core blazor blazor-server-side

2
推荐指数
1
解决办法
2561
查看次数

ValidationAttribute 在 Blazor 上部分工作或不工作?

我正在尝试解决在尝试使用 blazor 在我女儿的狗店上执行自定义验证属性时发现的问题。

基本上我有一个属性如下:

[Test]
public int? PetAge { get; set; }
Run Code Online (Sandbox Code Playgroud)

如您所见,我将创建一个名为“Test”的自定义属性,因此我创建了一个新类,如下所示:

public class Test : ValidationAttribute
{

    protected override ValidationResult? IsValid(object? value, ValidationContext validationContext)
    {
        return new ValidationResult("niet! niet!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的理解是,我可以返回一个带有字符串消息的新 ValidationResult,或者如果一切顺利,我可以返回 ValidationResult.Success。在我的示例中,它应该始终返回问题,因为除了始终返回验证结果之外,我们没有提供任何其他逻辑。

运行此代码时,它根本不返回任何内容,表单上也没有显示任何错误。现在我注意到的是,如果我使用 IsValid 方法的其他版本,它会起作用,唯一的问题是我想发回自定义消息而不仅仅是真/假结果。其工作原理如下:

public override bool IsValid(object? value)
    {
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我必须在参数中提供错误消息,如下所示:

[Test(ErrorMessage("this is not ok!")]
    public int? PetAge { get; set; }
Run Code Online (Sandbox Code Playgroud)

由于这些参数必须是常量,因此这是一个很棒的想法,不仅能够将自定义消息显示为错误和/或访问上下文等......

我在 Blazor 应用程序上做错了什么吗?任何帮助将不胜感激!

c# blazor-server-side

2
推荐指数
1
解决办法
791
查看次数

为什么我的 Blazor 单选按钮必须单击两次才能选择,而单击复选框时则必须取消选择?

我有一个 Blazor 表单,其中包含一些单选按钮(在 InputRadioGroup 内)和一些复选框。我有两个问题:

  1. 我必须单击单选按钮两次才能选择它。
  2. 选择后,如果我单击复选框,收音机将被取消选中。

我通过添加此剃刀组件,使用 Blazer Server .net 6.0 模板在新项目中重现了该问题:

<EditForm Model="FormModel">
    <InputRadioGroup @bind-Value="FormModel.SelectedRadio">
        <InputRadio Value="1" /> 1
        <InputRadio Value="2" /> 2
    </InputRadioGroup>
    <InputCheckbox @bind-Value="FormModel.Checkbox"/>
</EditForm>

@code {
    private FormData FormModel { get; set; } = new FormData();

    public class FormData
    {
        public string SelectedRadio { get; set; }
        public bool Checkbox { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

blazor blazor-server-side

2
推荐指数
1
解决办法
997
查看次数