如何解决如何使用两个可选的路由值配置路由?
这是我在 Startup.cs
中的路由配置:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",pattern: "{controller=Home}/{action=Index}/{id?}/{tab?}");
});
我的一些观点同时使用了 id
和 tab
,有些仅使用了 id
,有些仅使用了 tab
。
id
属于 Guid
类型,而 tab
属于 int
类型。
如何配置我的路由以消除以下 url 中的 id
-part (/0
) 到不使用它的视图?
/Home/Index/0/3 // id is not relevant,tab = 3
在这种情况下,我必须将 id
设置为 0
才能使 url 工作。这是一个索引视图,子部分以标签形式组织。
解决方法
为此,您可以执行类似的操作。根据您的评论,Id 为 guid,tab 为 int。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "onlyid",pattern: "{controller=Home}/{action=Index}/{id:guid}",new { tab = default(int) });
endpoints.MapControllerRoute(
name: "onlytab",pattern: "{controller=Home}/{action=Index}/{tab:int}",new { id = default(Guid) } );
endpoints.MapControllerRoute(
name: "default",pattern: "{controller=Home}/{action=Index}/{id:Guid}/{tab:int}");
});
现在,如果只有选项卡,则 onlyTab 将被选择,它具有 Guid 的默认值(Guid.Empty),但您可以像 /Home/Index/1 这样的地址。
如果只有 id,则 onlyId 将被选中并且它具有整数的默认值。首页/索引/你的向导
如果您通过了两条路线,则第三条路线将被选中。
作为控制器的方法如下所示。
public IActionResult Index(Guid? id,int? tab)
{
return Ok(new { Id = id,Tab = tab });
}
,
请试试这个代码
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",url: "{controller}/{action}/{id}/{tab}",defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional,tab= UrlParameter.Optional }
);
}
,
这似乎可以解决问题:
[Route("Home/{tab?}")]
public async Task<IActionResult> Index(string tab)
{
// do stuff
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。