我在这里完全不知所措。我有一个运行 .net5 的 Blazor WASM 托管,已部署到 Azure 应用服务。当没有数据库时,部署到 Azure 没有问题。它按预期加载并运行。我已经安装了 Identity 和 DBContext。一切都在本地构建并通过本地 SQL 实例正常运行。
在 Azure 上,我创建了一个新的 SQLServer 以及一个 SQL 数据库。在 SQL 数据库防火墙设置中,我有“允许 Azure 服务和资源访问此服务器”以及我的客户端 IP 的规则(不是 Azure 应用程序的 IP)。
对于配置中的应用服务,我有一个名为 DefaultConnection 的 ConnectionString(与 appsettings.json 中相同),其连接字符串与 SQLDatabase 提供的源 AppConfig、类型 SqlAzure 相同
我正在使用 VS2019 在服务器上发布项目(启动项目)发布到 Azure。我选择目标为 Azure -> Azure App Sevices (Windows) 和我的实例名称。配置为Release,目标框架net5.0,DeploymentMode依赖框架,目标运行时可移植。
服务依赖项设置为 AzureSqlDatabase,它使用 ConnectionName DefaultConnection,用户名和密码是在 Azure 上创建的 SQL Server 的管理员用户密码设置,SaveConnectionStringValue 是 Azure 应用程序设置。(这会自动填充上述应用服务配置连接字符串。
当我单击发布时,我在输出中看到所有发布都正确:
Publish Succeeded.
Web App was published successfully http://bbqfriend.azurewebsites.net/
========== Build: 1 succeeded, 0 failed, …Run Code Online (Sandbox Code Playgroud) 我不喜欢Identity的一件事是,必须在希望获取用户信息的控制器中实例化UserManager。在我的项目中,我将所有业务逻辑都移到了DAL类库中,并希望身份也可以存在。
我已经将所有身份类移到DAL类库中(ApplicationRole,ApplicationUser,ApplicationRoleManager,ApplicationSignInManager,ApplicationUserManager,EmailSerivce,SmsService)
我的DataContext继承自IdentityDBContext
public class DataContext : IdentityDbContext<ApplicationUser>
{
public DataContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
public static DataContext Create()
{
return new DataContext();
}
static DataContext()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, DataContextMigrationsConfiguration>());
}
Run Code Online (Sandbox Code Playgroud)
因此,我可以通过数据库上下文访问用户和角色
internal class UserRepository
{
internal ApplicationUser GetUserById(string id)
{
using(var db = new DataContext())
{
return db.Users.Where(a => a.Id == id).FirstOrDefault();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我无权访问ApplicationUserManager公开的方法。我正在尝试从用户存储库中访问ApplicationUserManager,但不知道如何实例化ApplciationUserManager类。
在控制器中,其实例化如下
private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
} …Run Code Online (Sandbox Code Playgroud) 我已经设置了一个基本的 WASM 托管模板并已转换为以下预渲染
https://jonhilton.net/blazor-wasm-prerendering/#commento-login-box-container
和
https://chrissainty.com/prerendering-a-client-side-blazor-application/
一切似乎都按预期工作,我可以单击导航链接,它会按预期更改页面。但是,我无法通过 URL 直接导航到页面。如果我输入 localhost:port/Counter 我会得到一个无法找到本地主机页面。当我单击计数器的导航链接时,它显示的 URL 为 localhost:port/Counter。
为什么我无法直接导航到该 URL?
编辑:
以下是一些文件,可帮助您了解正在发生的情况。
这是服务器Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
// This method gets called by …Run Code Online (Sandbox Code Playgroud)