根页面中的 Blazor 参数在 Azure 静态 Web 应用中不起作用
我有一个正在处理的 Blazor wasm 项目,并且具有以下功能:
当用户到达mydomain.com/customer时,他们会被重定向到客户详细信息
正如预期的那样,所有这些功能都来自 API,并且客户列表是动态的,因此我没有为每个客户设计自定义页面。我 - 相反 - 有一个页面来完成那个
在我的代码中,我使用以下逻辑:
当用户键入 mydomain.com/ 时,我会显示所有可用客户的列表
如果用户导航到 mydomain.com/customer,我的 Index.razor 页面将不会显示客户列表,而是显示客户详细信息
在显示客户列表的第一种情况下,当用户单击客户时,我使用 NavigationManager 导航到“/customer”。这很好用!
当我在本地机器上运行应用程序时,如果我直接指向 https://localhost:port/customer 的 URL,我将被定向到客户页面。
本质上,一切都发生在根页面(Index.razor)上。我知道我可以重定向到 https://localhost:port/c/customer 以避免使用根目录,但我什至不确定这是否真的是我的问题,如果我可以使用更优雅的东西,我想避免它就像我上面的解决方案一样,它可以在我的机器上本地工作。
将其部署到 Azure 静态 Web 应用程序后,如果我尝试直接访问 https://azure-static-apps-page/customer,则会收到 404 错误。如果我尝试转到根页面然后单击列表中的客户,我不会收到错误消息。
我怀疑一旦它在 Azure 中发布,我就会遗漏一些配置。
如果有帮助,我<base href="/" />的 index.html 中确实有
有人可以帮助我理解为什么会这样吗?
我的索引.razor
@page "/"
@page "/{CustomerURL}"
@inject NavigationManager navigationManager
@if(string.isNullOrEmpty(CustomerURL)
{
// Display list of customers (display a component)
} else
{
// Display specific customer details (display a component)
if(customer != null)
{
// Display customer details
} else {
<h3>Customer does not exist</h3>
}
}
参数和客户对象:
[Parameter]
public string? Customer { get; set; }
private Customer customer;
我的 OnInitializedAsync:
protected override Task OnInitializedAsync()
{
// If the parameter is not null, call the API to find the customer
customer = APICall();
}
我的 SetParametersAsync:
public async override Task SetParametersAsync(ParameterView parameters)
{
await base.SetParametersAsync(parameters);
customer = APICall();
}
选择客户时的我的 OnClick 方法:
public void OnCustomerSelected(Customer c)
{
// This is where the URL changes from https://localhost:port to https://localhost:port/customer
navigationManager.NavigateTo("/" + c.CustomerUrl);
}