我试图在 Visual Studio 模板应用程序中通过 Blazor 获取 Asp.Net Identity 登录,它仍然使用 Razor Pages 和 MVC 登录,但只能让它在事件上工作OnInitAsync,这没有用,因为它需要在按钮点击时完成,而不是在页面加载时完成。
我的失败代码是
protected async Task LoginTest()
{
await _SignInManager.SignInAsync(new ApplicationUser()
{ UserName = "test@test.com" }, true);
UriHelper.NavigateTo("/", true);
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
System.InvalidOperationException: The response headers cannot be modified because the response has already started.
at Microsoft.AspNetCore.HttpSys.Internal.HeaderCollection.ThrowIfReadOnly()
at Microsoft.AspNetCore.HttpSys.Internal.HeaderCollection.set_Item(String key, StringValues value)
at Microsoft.AspNetCore.Http.Internal.ResponseCookies.Append(String key, String value, CookieOptions options)
at Microsoft.AspNetCore.Authentication.Cookies.ChunkingCookieManager.AppendResponseCookie(HttpContext context, String key, String value, CookieOptions options)
at Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler.HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties properties)
at Microsoft.AspNetCore.Authentication.AuthenticationService.SignInAsync(HttpContext context, String …Run Code Online (Sandbox Code Playgroud) 我有一个简单的子 Blazor 组件(MyModal),如下所示:
<div class="modal">
<h3>@Title</h3>
@BodyTemplate
</div>
@code
{
[Parameter] string Title { get; set; }
[Parameter] RenderFragment BodyTemplate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的父组件中,我这样称呼它:
<MyModal Title="Super Cool Modal">
<BodyTemplate>
@MyObject.Name
</BodyTemplate>
</MyModal>
public MyObject MyObject { get; set; } = new MyObject();
Run Code Online (Sandbox Code Playgroud)
稍后在页面最初呈现后我更新,MyObject但引用的子组件本身@MyObject.Name永远不会更新。
似乎我必须在更新对象 ( StateHasChanged)后强制刷新子对象,但不确定如何使用此示例执行此操作。
如何在 Blazor 服务器端获取客户端信息,例如 IP 地址和浏览器名称/版本?
我们在 Visual Studio 2022 中有 .NET 6 Blazor 服务器端项目。我们想在 .NET 6 中使用 .Net Framework 4.8 类库。在这个类库中,我们使用 System.Windows.Form 并且无法重新编译该类具有 .NET Standard 2.0 的库。
我已添加 .Net Framework 4.8 类库项目作为 Blazor 应用程序的依赖项。我能够编译解决方案,但当尝试运行 Blazor 应用程序时,它会抱怨“System.IO.FileNotFoundException:'无法加载文件或程序集'System.Windows.Forms,Version = 4.0.0.0,Culture =neutral, PublicKeyToken=b77a5c561934e089'。”。
我们只想在 Windows 中运行 Blazor 项目。
我有一个现有的.net core 3.0 preview 7 web 应用程序。我的应用程序主要是组织成区域的剃刀页面,例如。Admin、Sales 等。如果我将blazor组件放在应用程序的根目录下,我可以成功使用它,但是,如果我将组件移动到 RCL,我可以访问该组件但它没有响应(单击按钮对于计数器示例不增加计数)。
我希望能够去localhost/Admin/RazorPageContainingBlazorComponent或localhost/Sales/AnotherRazorPageContainingBlazorComponent
我在 Chrome 开发工具中收到此错误:''' 错误:无法完成与服务器的协商:错误
https://localhost:5000/myfeature/_blazor/negotiate 404 '''
我相信这是由将 signalR 集线器映射到https://localhost:5000/ 引起的,但我不确定如何添加额外的 blazor 集线器映射或如何更改 blazor.server.js 以使用根集线器。
如何从布局访问页面的路由参数?
我有一个接受路由参数的页面,如下所示:
@page /my-page/{Slug}
Run Code Online (Sandbox Code Playgroud)
我需要访问Slug在共享布局中呈现标记时的值。
我尝试OnParametersSet在布局文件中实现如下所示,但未设置该值。它仅在页面级别分配。
@inherits LayoutComponentBase
<div class="sidebar">
<NavMenu />
</div>
<div class="main">
<div class="top-row px-4">
@this.Slug <<<<------ display the parameter
</div>
<div class="content px-4">
@Body
</div>
</div>
@code
{
[Parameter]
public string Slug { get; set; }
protected override void OnParametersSet()
{
// Slug is always null :-/
}
}
Run Code Online (Sandbox Code Playgroud) 我正在创建一个服务器端 Blazor 应用程序。以下代码位于Startup.cs.
services.AddDbContext<MyContext>(o => o.UseSqlServer(Configuration.GetConnectionString("MyContext")), ServiceLifetime.Transient);
services.AddTransient<MyViewModel, MyViewModel>();
Run Code Online (Sandbox Code Playgroud)
在 ViewModel 中:
public class MyViewModel : INotifyPropertyChanged
{
public MyViewModel(MyContext myContext)
{
_myContext = myContext;
}
public async Task<IEnumerable<Dto>> GetList(string s)
{
return await _myContext.Table1.where(....)....ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)
并在剃刀文件中。
@inject ViewModels.MyViewModel VM
<input id="search" type="text" @bind="search" />
<input id="search" type="button" value="Go" @onclick="SearchChanged" />
@code {
string search = "";
int currentCount = 0;
async void SearchChanged() {
currentCount++;
dtos = GetList(search);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,有时单击搜索按钮时会出现以下错误?
System.InvalidOperationException: '在上一个操作完成之前,在此上下文中启动了第二个操作。这通常是由使用相同 DbContext 实例的不同线程引起的。有关如何避免 DbContext 线程问题的详细信息,请参阅 …
c# entity-framework entity-framework-core blazor blazor-server-side
我正在尝试在 .net core 3 MVC 项目中使用 Blazor。我使用了一些教程来做到这一点,比如https://fizzylogic.nl/2019/08/18/integrating-blazor-in-an-existing-asp-net-core-application/和https://chrissinty.com /using-blazor-components-in-an-existing-mvc-application/。
工作原理:Blazor 组件的初始化工作正常。OnInitializedAsync() 函数被触发,组件渲染得很好。
这是来自 MVC 视图的调用:
@(await Html.RenderComponentAsync<MyProject.Components.Locations>(RenderMode.ServerPrerendered))
Run Code Online (Sandbox Code Playgroud)
什么不起作用:在 Blazor 组件中使用 @onclick。这是一些示例代码:
<span @onclick="AddLocation"></span>
@code {
private void AddLocation(){
}
}
Run Code Online (Sandbox Code Playgroud)
它可能不起作用的原因是我在连接初始化时出错。组件不是从基本路径渲染的,而是从特定视图的 url 渲染的,我认为这会影响连接。我在 Chrome 的控制台中收到这些错误:
主要的错误可能是'将'_blazor '标准化为' https://localhost:44375/Locations/_blazor ' '。从基本路径请求 _blazor 有效。有谁知道在这种情况下如何设置基本路径?
(是的,普通 Razor 页面环境中的 …
我在我的应用程序中使用 URL 参数作为页面状态。
如何在不实际导航的情况下更改 URL?
谢谢!
(使用 blazor 服务器端)
我想了解,如何为Blazor 服务器端应用程序设置JWT 身份验证?
让我举一个例子:假设我们有一个 .NET Core 3.1 Web API 项目。该项目有自己的TokenController实现,它为有效的用户/密码组合提供 JWT。所有其他控制器对每个请求都需要这样的令牌。
验证身份验证的中间件配置如下:
// enabling JWT bearer scheme
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
// TOKEN VALIDATION PARAMETERS
};
});
// applying default authentication policy
services.AddMvc(o =>
{
o.EnableEndpointRouting = false;
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
o.Filters.Add(new AuthorizeFilter(policy));
}).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
Run Code Online (Sandbox Code Playgroud)
到这里为止,这工作得很好。
现在我想为这个项目添加一个漂亮的 Blazor 服务器端 UI,但我无法思考如何进行身份验证?
根据 Microsoft Docs,服务器端应用程序的身份验证应该在建立 SignalR 连接时进行:
Blazor 服务器身份验证
Blazor 服务器应用通过使用 SignalR 创建的实时连接运行。在建立连接时处理基于 SignalR 的应用程序中的身份验证。身份验证可以基于 cookie或其他一些不记名令牌。
(来源: …
blazor ×7
c# ×4
.net ×3
asp.net-core ×2
.net-4.8 ×1
.net-6.0 ×1
.net-core ×1
asp.net-mvc ×1
jwt ×1
jwt-auth ×1
razor-pages ×1