Blazor - 多参数路由(带逗号)导致异常
Blazor - Multiple parameters routing (with comma) results in exception
将 ASP.NET 核心 MVC 网络应用程序迁移到 Blazor,我遇到了路由问题。我当前的 ASP.NET MVC 路由似乎无法在 @page
指令中复制。
一个例子 URL : https://wows-karma.com/player/503379282,Akurai_Isayeki/
ASP.NET 核心 MVC 中的路由直到现在在控制器中以这种方式执行:
[Route("/{controller}/{id},{name}")]
public async Task<IActionResult> Profile(uint id)
{
// Controller Code
}
这里只使用了账号ID
,我们忽略下面的用户名(你甚至可以直接删除它,只要你留下逗号,它应该仍然有效)。
现在将它移植到 Blazor,我希望有一个简单的解决方案,就像这样:
@page "/player/{id},{name?}/"
// Page HTML
@code {
[Parameter]
public uint Id { get; set; }
[Parameter]
public string Name { get; set; } // We don't need it, and we'll ignore it.
// Page Code
}
一切似乎都很好。但是当运行时,Index
抛出这个异常:
(请注意,我尝试了其他变体,例如带或不带斜杠、问号 name
并且出于绝望,将 , 替换为 - 作为分离。也没有运气)
我现在的观点是,Blazor 路由是否支持这种边缘情况?我问这个,因为我必须 STRICTLY 遵循这个精确的路由,以保持 URL 与使用相同方案的另一个网站的兼容性。
现在,我可以使用一些 Regex 魔法作为解决方法,在一定程度上缓解问题,但这很可能会导致更多问题,而实际上并没有直接解决问题。所以我只会在别无选择的情况下使用它。让我们只希望它不会变成那样...
我认为您不能在 Blazor 路由中使用该逗号分隔参数。
理想情况下,您的路线应该是这样的:
@page "/player/{id}/{name}"
如果您必须保持合规性,我会选择
@page "/player/{idAndName}"
@code {
[Parameter] public string idAndName { get; set; }
protected override void OnParametersSet()
{
// Split the string property idAndName into the separate values you need.
}
}
如果你想使用非字符串路由参数你需要使用Route Constraints。但是,在您的案例中,uint
似乎 不受 支持。
.razor
方式是两行:
@page "/player/{id:int}"
@page "/player/{id:int}/{name}/"
将 ASP.NET 核心 MVC 网络应用程序迁移到 Blazor,我遇到了路由问题。我当前的 ASP.NET MVC 路由似乎无法在 @page
指令中复制。
一个例子 URL : https://wows-karma.com/player/503379282,Akurai_Isayeki/
ASP.NET 核心 MVC 中的路由直到现在在控制器中以这种方式执行:
[Route("/{controller}/{id},{name}")]
public async Task<IActionResult> Profile(uint id)
{
// Controller Code
}
这里只使用了账号ID
,我们忽略下面的用户名(你甚至可以直接删除它,只要你留下逗号,它应该仍然有效)。
现在将它移植到 Blazor,我希望有一个简单的解决方案,就像这样:
@page "/player/{id},{name?}/"
// Page HTML
@code {
[Parameter]
public uint Id { get; set; }
[Parameter]
public string Name { get; set; } // We don't need it, and we'll ignore it.
// Page Code
}
一切似乎都很好。但是当运行时,Index
抛出这个异常:
(请注意,我尝试了其他变体,例如带或不带斜杠、问号 name
并且出于绝望,将 , 替换为 - 作为分离。也没有运气)
我现在的观点是,Blazor 路由是否支持这种边缘情况?我问这个,因为我必须 STRICTLY 遵循这个精确的路由,以保持 URL 与使用相同方案的另一个网站的兼容性。
现在,我可以使用一些 Regex 魔法作为解决方法,在一定程度上缓解问题,但这很可能会导致更多问题,而实际上并没有直接解决问题。所以我只会在别无选择的情况下使用它。让我们只希望它不会变成那样...
我认为您不能在 Blazor 路由中使用该逗号分隔参数。
理想情况下,您的路线应该是这样的:
@page "/player/{id}/{name}"
如果您必须保持合规性,我会选择
@page "/player/{idAndName}"
@code {
[Parameter] public string idAndName { get; set; }
protected override void OnParametersSet()
{
// Split the string property idAndName into the separate values you need.
}
}
如果你想使用非字符串路由参数你需要使用Route Constraints。但是,在您的案例中,uint
似乎 不受 支持。
.razor
方式是两行:
@page "/player/{id:int}"
@page "/player/{id:int}/{name}/"