繁体   English   中英

Blazor - 多参数路由(带逗号)导致异常

[英]Blazor - Multiple parameters routing (with comma) results in exception

将 ASP.NET Core MVC web 应用程序迁移到 Blazor,我遇到了路由问题。 我当前的 ASP.NET MVC 路由似乎无法在@page指令中复制。

URL 示例: https://wows-karma.com/player/503379282,Akurai_Isayeki/

到目前为止,ASP.NET 核心 MVC 中的路由在 controller 中以这种方式执行:

[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 路由是否支持这种边缘情况? 我问这个,因为我必须严格遵循这个精确的路由,以保持URL与使用相同方案的另一个网站的兼容性。

现在,我可以使用一些正则表达式魔法作为一种解决方法,在一定程度上缓解这个问题,但这很可能会导致更多的问题,而实际上并没有直接解决问题。 所以我只会在别无选择的情况下使用它。 让我们只希望它不会变成那样......

我认为您不能使用该逗号分隔 Blazor 路由中的参数。

理想情况下,您的路线将类似于:

@page "/player/{id}/{name}"

如果您必须保持合规性,我会为 go

@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}/"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM