MVC中具有默认值的可选路由数据

时间:2017-07-05 12:11:30

标签: c# asp.net-mvc model-view-controller routing

我有这个路由:

app.UseMvc(routes =>
            {
                routes.MapRoute(
                name: "default",
                template: "{culture=en-US}/{controller=Home}/{action=Index}/{p1?}/{p2?}");
            });

最后两项是可选的,实际上它们在大多数页面中都不存在,而且是针对特定页面的(我也希望它是登录页面)但是它不能为可选参数定义值。 / p>

我尝试了{p1?=somevalue},我收到错误告诉我?必须是最后一个字符。 {p1=somevalue?}也不起作用。

2 个答案:

答案 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)

尝试创建两条路线

app.UseMvc(routes =>
{
     routes.MapRoute(
     name: "default",
     template: "{culture=en-US}/{controller=Home}/{action=Index}");
});

app.UseMvc(routes =>
{
    routes.MapRoute(
    name: "custonRoute",
    template: "{culture=en-US}/{controller=Home}/{action=Index}/{p1?}/{p2?}");
});