我正在进行MVC routing frame work
。我对RouteCollection.MapRoute
方法所采用的参数感到有点困惑。
如果我采用以下请求的传统示例
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
- List item
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
使用以下签名进行映射
public static Route MapRoute(
this RouteCollection routes,
string name,
string url,
Object defaults
)
我的问题是"对象默认值" ,
new { controller = "Home", action = "Index", id = "" }
CLR interpret sequence
参数?跟进问题:
一个。为什么我们在一个括号{}中装饰控制器,动作或id?
湾URL指定和默认值之间是否有匹配?
答案 0 :(得分:3)
为什么我们将它用作新的{controller =" Home",action =" Index",id ="" }
基本上使用默认值初始化路线。您传递到MapRoute
方法的值会转换为IDictionary<string, object>
以供日后查找。
Is this is a fixed format?
不,您可以根据您的网址省略或添加更多值。您在默认值中指定的值将用于查找。
例如,您可以设置路径名称Search,如下所示:
routes.MapRoute(
name: "Search",
url: "{controller}/{action}/{searchId}",
defaults: new {controller = "Account", action = "Login", searchId = UrlParameter.Optional}
);
CLR如何对参数进行interprt排序?
将它们添加到字典中(准确地说是RouteValueDictionary)。
一个。为什么我们在一个括号{}中装饰控制器,动作或id?
简短的回答,这是一个约定......根据MSDN的长答案,摘自MSDN Article
在URL模式中,您可以通过将它们括在大括号中来定义占位符 ({和})。您可以在段中定义多个占位符, 但它们必须用字面值分隔。例如, {language} - {country} / {action}是一种有效的路由模式。然而, {language} {country} / {action}不是有效模式,因为有 占位符之间没有文字值或分隔符。因此, 路由无法确定在何处分离语言的值 占位符来自国家占位符的值。
b. Is there any match in between URL specify and defaults?
是的,默认值是针对URL中的占位符。如果添加更多默认值然后添加占位符,则会忽略它。如果该参数的值未包含在URL中,则使用默认值。
有关详细信息,我将向您指出这个优秀的MSDN Article。
希望这有帮助。
答案 1 :(得分:0)
routes.MapRoute(
name: "Search",
url: "{controller}/{action}/{searchId}",
defaults: new {controller = "Account", action = "Login", searchId = UrlParameter.Optional},
new {id = @"\d{1, 2}" }
);
new
表达式不适用于MVC 5约束吗?