我有这个路由:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{culture=en-US}/{controller=Home}/{action=Index}/{p1?}/{p2?}");
});
最后两项是可选的,实际上它们在大多数页面中都不存在,而且是针对特定页面的(我也希望它是登录页面)但是它不能为可选参数定义值。 / p>
我尝试了{p1?=somevalue}
,我收到错误告诉我?
必须是最后一个字符。 {p1=somevalue?}
也不起作用。
答案 0 :(得分:5)
不应该是:
routes.MapRoute(
name: "default",
url: "{culture}/{controller}/{action}/{p1}/{p2}",
defaults: new
{
culture = "en-US",
controller = "Home",
action = "Index",
p1 = UrlParameter.Optional,
p2 = UrlParameter.Optional
}
);
然后您的方法签名就像这样设置默认值:
public ActionResult Index(var p1 = defaultValue, var p2 = defaultValue)
据我所知,您无法在网站范围内设置默认广告,仅适用于他们应用的每项操作。
虽然您看起来像是在尝试使用RouteAttribute
,但这种方式与您尝试的方式相同:
[HttpGet("{p1:var?}{p2:var?}"]
public ActionResult Index(var p1 = defaultValue, var p2 = defaultValue)
请注意: 我已使用var
,因为我不知道您的方法签名是什么,defaultValue
因为我不知道知道你的默认值。
答案 1 :(得分:1)
尝试创建两条路线
1°
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{culture=en-US}/{controller=Home}/{action=Index}");
});
2º
app.UseMvc(routes =>
{
routes.MapRoute(
name: "custonRoute",
template: "{culture=en-US}/{controller=Home}/{action=Index}/{p1?}/{p2?}");
});