【发布时间】:2023-03-24 10:19:01
【问题描述】:
这个问题之前已经被问过了,因为我是 Razor Pages 的新手,无法弄清楚我如何才能满足要求(愚蠢的一个)。所以这里是:我有一个razor page,我在其中显示了一个数据列表,我必须在其中进行页面路由或 url,如下所示:
@foreach (var item in Model.Data)
{
<a href="./search_details/id/@item.Id">@item.Name @item.City @item.State</a>
}
非常简单,所以在Startup.cs 中,我尝试执行以下操作以使其正常工作。不幸失败了:
//This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc();
services.AddEntityFrameworkSqlite().AddDbContext<MyDbContext>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddMvc().AddRazorPagesOptions(options =>
{
//Here is the configured routing that I tried
options.Conventions.AddPageRoute("/search_details", "/search_details/id");
});
}
我想将 url 返回为 ./search_details/id/1002 并在后端,这样做是为了获取查询字符串值:
string id = this.RouteData.Values["id"].ToString();
这是非常基本的,但正如我所说的失败(失败意味着在后端,调试时查询字符串不会命中)。我还有一个场景,这件事现在最困扰我。我的要求是也隐藏页面名称。像这样的:
localhost:8080/search_details/id/1002
到
localhost:8080/1002
有没有合适的方法可以做到这一点?我知道这对于其他目的来说是一种不好的做法,但目前我会接受它。
注意:除非没有替代品,否则我不愿意在客户端这样做。如果可能,最好在服务器端使用C#。
【问题讨论】:
-
与您的问题无关,已回答,但您拨打了三遍
AddMvc。没有必要这样做。您可以将SetCompatibilityVersion和AddRazorPagesOptions链接到对AddMvc的第一次调用:services.AddMvc().SetCompatibilityVersion(...).AddRazorPagesOptions(...) -
好的@Mike Brind。感谢您通知这一点,并将在一个声明中完成。
标签: c# asp.net-core routing razor-pages