在.Net Core razor页面中传递路由参数

Ali*_*imi 2 mvvm asp.net-core razor-pages

我想将参数传递给OnGet()方法,但它不稳定并且每次都不一样,例如:

test.com/book
test.com/book/page/word
test.com/book/page
test.com/book/page/word/...
Run Code Online (Sandbox Code Playgroud)

参数不稳定,是动态创建的。

我该如何处理这个问题?

Mét*_*ule 7

您可以使用@page指令来处理这个问题。

根据您的实际需要,有多种选择。

您事先知道 URL 的结构

在您的.cshtml页面中,您添加@page指令,每个可选参数后跟一个问号。请注意,您还可以指定约束来指定特定参数需要是某种类型,例如整数(例如,这里line是可选整数)。

@page "/book/{pageName?}/{line:int?}/{word?}"
Run Code Online (Sandbox Code Playgroud)

在模型类中,添加与@page指令中的名称匹配的可为空的可选参数:

@page "/book/{pageName?}/{line:int?}/{word?}"
Run Code Online (Sandbox Code Playgroud)

您不知道网址的确切结构

在这种情况下,您可以使用通配符参数,在参数名称前用星号指定:

@page "/book/{*content}"
Run Code Online (Sandbox Code Playgroud)
public void OnGet([FromRoute] string pageName= null, [FromRoute] int? line = null, [FromRoute] string word = null)
{
    // TODO handle parameters
    // note that line is guaranteed to be an integer
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,content将包含在 后传递的整个字符串/book/,包括正斜杠,例如page/word/5/test。然后您可以根据您的需要对其进行处理。