【问题标题】:Blazor - Multiple parameters routing (with comma) results in exceptionBlazor - 多参数路由(带逗号)导致异常
【发布时间】:2021-01-02 14:12:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# asp.net-core url-routing blazor


    【解决方案1】:

    我认为您不能使用该逗号分隔 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.
       }
    }
    

    【讨论】:

    • 感谢您的回复。似乎更像我提到的正则表达式解决方法。有人使用和滥用这个idAndName Regex-ing 的可能性是什么?如果有人试图抛出一个 1000 个字符长的参数,而应用程序突然无缘无故地抛出异常,我只是不想在安全性或性能方面冒险。以前见过,所以是的... x)
    • 我认为您的安全问题与他们分别传递值没有任何不同。在 OnParametersSet 中捕获这些异常并优雅地处理。 PS。 J'aime bien "黑暗无限"!!辛苦了...
    • 非常感谢,尼尔!对于安全主题和更具艺术性的主题;)
    【解决方案2】:

    如果你想使用非字符串路由参数,你需要使用Route Constraints。但是,在您的情况下,uint 似乎受支持。

    .razor 的方式是两行:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多