具有自定义网址参数的网址操作

时间:2019-07-22 23:13:22

标签: asp.net-core-2.2

我正在创建具有自定义Route参数的ASP.net core 2.2 MVC应用,因此在我的startup.cs中已经创建

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{location=london}/{controller=Home}/{action=Index}/{id?}");
        });

这正常工作,我可以通过ViewContext或HttpContext.GetRouteData()方法访问控制器中的位置。

但是,当我在自己的视图中使用Url.Action生成Url时,我唯一能获得生成Url的方法就是使用

@Url.Action("ProjectSearch","Projects", new { 
  location=ViewContext.RouteData.Values["location"] })

根据我的阅读,尽管它应该使用传递到当前上下文中的位置(我正在浏览到http://mysite/reading/projects),所以我应该可以使用

@Url.Action("ProjectSearch","Projects") 

但是它只返回null。

我真的需要添加     我所有的Url.Action调用都“新建{location = ViewContext.RouteData.Values [“ location”]}“”

编辑

我在测试应用程序中尝试过并获得了相同的功能。从ASP.net Core 2.2 MVC WebApp开始。将startup.cs更改为

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{location=foo}/{controller=Home}/{action=Index}/{id?}");
        });

并将以下内容添加到index.cshtml

RouteParam: @ViewContext.RouteData.Values["location"]<br />
1st Url:@Url.Action("Privacy")<br />
2nd Url:@Url.Action("Privacy","Home",new { location = ViewContext.RouteData.Values["location"] })<br />

,当您导航到“ https://localhost:44391/bar/home/index”时 您将获得以下输出:

RouteParam:栏

第一个网址:/ foo / Home / Privacy

第二个网址:/ bar / Home / Privacy

0 个答案:

没有答案