我遇到了带参数的网址路径问题。我跟着这个链接: ASP.NET MVC 5 culture in route and url
我在控制器博客下有标记操作。根据文化,我在路线配置中创建了两条路线:
routes.MapRoute(
name: "TagWithCulture",
url: "{culture}/{controller}/{action}/{Name}/{page}/{pageNo}",
defaults: new { controller = "Blog", action = "Tag", Name = UrlParameter.Optional, pageNo = UrlParameter.Optional, page = UrlParameter.Optional },
constraints: new { culture = new CultureConstraint(defaultCulture: "ar", pattern: "[a-z]{2}") }
);
routes.MapRoute(
name: "Tag",
url: "{controller}/{action}/{Name}/{page}/{pageNo}",
defaults: new { controller = "Blog", action = "Tag", Name = UrlParameter.Optional, pageNo = UrlParameter.Optional, page = UrlParameter.Optional }
)
控制器中的操作就是这行代码接受2个参数:
public async Task<ActionResult> Tag(string Name, int? pageNo)
问题是:当我用这样的查询字符串浏览网址时:
localhost:1025/blog/tag?name=XYZ
并调试,我可以看到&#39; name&#39;参数有一个值,否则,通过浏览网址和应用路由:
localhost:1025/blog/tag/XYZ
参数&#39; name&#39;变为空!
这引起了头痛,是否有解决方案呢?
答案 0 :(得分:0)
如上所述,通过将特定路由置于默认路由之上,首先处理它们。然后,使您的路线更具体,这样他们就不会不恰当地捕捉到不是blog
的东西。
我不确定page
和pageNo
是否都是必需的 - 它们不在您的操作方法中,所以我不假设。
routes.MapRoute(
name: "Tag",
url: "blog/tag/{Name}/{pageNo}",
defaults: new { controller = "Blog", action = "Tag", pageNo = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
按照您在问题中的方式执行此操作无法按预期运行,因为转到/
会尝试映射到blog/tag
操作。