2017-11-10 173 views
0

我有一个包含报告的项目。在休息阅读了最佳做法,它看起来像我应该有类似下面列出了所有的报告页面的URL:在ASP.NET Core REST URL中包含参数

http://../Projects/23/Reports 

要查看特定报告,我会使用类似下面的链接:

http://../Projects/23/Reports/2 

我试过很多方法来建立这些与asp标签帮手没有运气的链接。例如:

<a asp-page="/Projects/{pid}/Reports/{rid}" asp-route-pid="@item.ID" asp-route-rid="@report.ID" >View Report</a> 

默认情况下,它看起来像ASP,为route- *钉将这些项目作为参数(即PID = 23 & RID = 2?)和可能的工作,但似乎并不像推荐的网址。

+0

问题是您正在使用Razor页面。除此之外,由于路由是基于文件系统的,因此您无法真正实现此类路由。这只是Razor Pages吸引众多,许多原因之一。去核心MVC,不要回头。 –

回答

1

您可以在* .cshtml文件中的@page指令旁边定义自定义剃须刀页面路由。

@page "{pid}/{rid}" 

因此,当您的剃须刀页面为Projects.cshtml时,您将拥有以下URL。

/Projects/23/2 

您还可以在您的URL中添加静态信息。现在

@page "{pid}/Reports/{rid}" 

您的网址将

/Projects/23/Reports/2 

如果要定义路由所有的剃刀页面,你可以看到我是如何为了定义在这个岗位目前的语言做了。

Asp.net core Localization always returns english clulture

我希望它能帮助。

+0

我认为这是正确的方向,并可能工作,如果文件在同一目录中。我有子文件夹中的报告/索引和剃刀页文件夹路由似乎优先。例如这个标签助手asp-page =“./ Reports/Index”asp-route-pid =“@ item.ID”和这个页面指令@page“{pid}/Reports”产生这个URL:.../Projects/Reports/130/Reports –

+0

尝试删除点。使用“/ Reports/Index”而不是“./Reports/Index” – pitaridis