更新的答案展示WASM和服务器项目之间的完全混合 - 包括AzureAD身份验证
在与@MrC aka Shaun Curtis的讨论中,我承诺将AzureAD身份验证添加到解决方案中,结果发现它比我预期的要复杂得多。
我为该解决方案准备了一个Github存储库:https://github.com/gwruck/Blazor_WASM_Server
需要做很多工作,特别是对于身份验证,但最终与Visual Studio的Blazor WASM托管解决方案的基本模板相比,变化并不太大。
以下是解决方案的屏幕截图,我鼓励您查看。
原始答案显示如何在服务器项目上托管Blazor页面的详细说明
- 创建新的Blazor Web Assembly Solution(WASM)。选择托管选项。您应该在解决方案中有三个项目(Client、Server和Shared)
- 创建一个新的Blazor Server项目。我们将使用此作为虚拟模板,以便更容易地在WASM项目中实现服务器页面。将突出显示的文件夹/文件复制到WASM.Server项目中。
在服务器项目中
- 更新所有导入文件中的命名空间/引用等。我还执行以下重命名以避免与WASM项目发生冲突:
- wwwroot/css文件夹 --> wwwroot/svr-css
- wwwroot/favicon.ico --> wwwroot/svr-favicon.ico
- App.razor --> ServerApp.razor(然后在_Layout.cshtml中更新对此文件的引用)
- 将@page路径(包括_Host)更改为具有前缀,例如@page“/counter”--> @page“svr / counter”
- 更新ServerApp.razor文件
- 更新_Layout文件以引用新的svr-css文件夹位置
- 按照以下方式更新Program.cs(注意:我无法使代码格式化工作,因此如果您需要此代码的文本,请转到本答案末尾的Github链接)
以下是Server项目的最终结构。
然后导航到应用程序url [https://localhost:7073/],您应该会看到WASM主页:
然后,如果您导航到/srv url [https://localhost:7073/srv],您应该会看到我们用于创建此示例的虚拟Blazor Server应用程序的Blazor Server主页。
以下是Github存储库的链接。https://github.com/gwruck/BlazorWasmMixedwithServerPages
对于生产应用程序,您还需要实现许多其他内容,包括身份验证以及如何使用户在WASM和Server页面之间导航时获得无缝体验。 还需要考虑Server项目中的其他路径(例如/api等)的MapWhen部分,以确保为这些路径实现正确的行为。
对于导航,我的计划是在WASM应用程序中使用iframe调用和显示Server应用程序页面,以便从用户的角度来看,这是一个应用程序,具有一致的布局等。
为了进行身份验证,我使用Azure AD。考虑到我还要使用服务器项目来托管Web Api,这可能会有一些挑战。如果确实存在困难,我将添加另一篇文章。