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

Ash*_*ani -1 c# model-view-controller asp.net-mvc routing

我有这个路由:

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

最后两个项是可选的,实际上它们在大多数页面中都不存在,并且是针对特定页面的(我也希望它是登录页面)但是它不允许为可选参数定义值.

我试过{p1?=somevalue},我得到一个错误,告诉我?必须是最后一个角色.{p1=somevalue?}也不起作用.

edi*_*ode 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
    }
);
Run Code Online (Sandbox Code Playgroud)

然后您的方法签名将是这样设置默认值:

public ActionResult Index(var p1 = defaultValue, var p2 = defaultValue)
Run Code Online (Sandbox Code Playgroud)

据我所知,您无法在网站范围内设置默认值,仅适用于他们应用的每个操作.

虽然你看起来像是在尝试使用RouteAttribute它的方式,但你尝试的方式是:

[HttpGet("{p1:var?}{p2:var?}"]
public ActionResult Index(var p1 = defaultValue, var p2 = defaultValue)
Run Code Online (Sandbox Code Playgroud)

请注意:我使用过,var因为我不知道你的方法签名是什么,defaultValue因为我不知道你的默认值.