你的位置:首页 > 软件开发 > ASP.net > ASP.NET路由[ASP.NET Routing]

ASP.NET路由[ASP.NET Routing]

发布时间:2015-10-13 19:00:32
ASP.NET路由[ASP.NET Routing]  ASP.NET路由允许你在使用URL时不必匹配到网站中具体的文件,因为这个URL不必匹配到一个文件,你使用了描述用户行为且更容易被用户理解的URL。  ASP.NET MVC框架和ASP.NET动态数据(Dynamic Da ...

get='_blank'>ASP.NET路由[ASP.NET Routing]

  ASP.NET路由允许你在使用URL时不必匹配到网站中具体的文件,因为这个URL不必匹配到一个文件,你使用了描述用户行为且更容易被用户理解的URL。

  ASP.NET MVC框架和ASP.NET动态数据(Dynamic Data)扩展路由为MVC应用和动态数据应用增加了特色。

  在不使用路由的ASP.NET应用中,一个新的请求会被映射到一个物理文件并由该文件处理这个请求,例如一个.aspx文件。例如,如下请求http://server/application/Products.aspx?id=4会题映射到一个包含代码和标签来向浏览器渲染响应的Products.aspx文件。Web页面人员使用id=4的查询字符来确定显示的内容。

  使用ASP.NET路由,你可以定义映射请求-处理程序(request-handler)文件的URL模式,但没必要在将这些文件的名字包含在这个URL中。除此之外,你还可以通过在URL模式中使用占位符来向请求处理程序传输变量数据,而不必使用查询字符串。

  例如,如下请求 http://server/application/Products/show/beverages,路由分析器会向页面处理器传入Products,show,beverages这些值。在这个例子中,如果使用server/application/{area}/{action}/{category}URL模式定义路由,页面处理器将会收到一个字典集合,这个集合中包含以下键值对,area:Products,action:show,category:beverages。如果是在一个不被URL路由管理的请求中,/Products/show/beverages片断将会被当作应用中的一个文件路径解释执行。

一、      路由[Routes]

  路由是被处理程序映射的URL模式。处理程序可以是一个物理文件,例如Web Form应用中的.aspx文件。处理也可以是处理请求的类,例如MVC应用中的控制器。为了定义一个路由,你需要创建一个Route类的实例来指定URL模式,处理程序和可选的路由名称。

  你需要给RouteTable类的Routes静态属性添加Route对象来为应用添加路由。Routes属性是一个RouteCollection对象,其中存放着应用中所有路由规则。

  你通常没有必要为MVC应用编写代码添加来添加路由规则。Visual Studio的MVC项目模板包含了预配置的URL路由规则。他们定义在MvcApplication类,这个类在Global.asax文件中。

二、      URL模式[URL Patterns]

  一个URL模式可以包含字面值(literal)和可变的占位符(参考URL参数)。这些字面值和占位符在URL片断中通过斜线(/)字符来分开和定位。

  当一个请求到达,这个URL被解析成片断和占位符,这些变量会提供给请求处理器。这个过程和将数据通过查询字符串(query strings)中解析和传输至请求处理器很类似。这两种情况下变量信息都会包含在URL中并传到处理程序的键值对的表单中。对于查询字符串而言,所有键(keys)和值(values)都包含在URL中。对于路由方式,所有键就是在URL模式中定义的占位符名称,只有值包含中URL中。

  在一个URL模式中,你定义的占位符被大括号包裹起来({and})。你可以在一个片断中定义多个占位符,但是它们必须被字面值分隔开。例如,{language}-{country}/{action}就是一个合法的路由模式。然而{language}{country}/{action}不是一个合法的路由模式,因为它们的占位符之间缺少字面值或分隔符。因此,路由无法确定language和country占位符的值是何处分隔。

  下表给出了合法的路由模式,以及其各自能正确匹配的URL请求。

路由定义

匹配URL示例

{controller}/{action}/{id}

/Products/show/beverages

{table}/Details.aspx

/Products/Details.aspx

blog/{action}/{entry}

/blog/show/123

{reporttype}/{year}/{month}/{day}

/sales/2008/1/5

{locale}/{action}

/US/show

{language}-{country}/{action}

/en-US/show

MVC应用中标准的URL模式[Typical URL Patterns in MVC Applications]

  在MVC应用中,路由标准的URL模式包含{controller}和 {action}占位符。

  当接收到一个请求时,它先被发送到UrlRoutingModule对象,再发送到MvcHandler HTTP处理程序。MvcHandler HTTP处理程序确定需要执行的控制器,通过给URL中的controller值添加”Controller”后缀从而确定将处理本次请求的控制器类型名称。URL中的action值确定调用的处理方法。

  例如,URL路径 /Products会被映射成ProductsController控制器。action参数的值是被调用的处理方法的名称。URL路径/Products/show的映射结果将会是调用类ProductsController 的方法Show。

  下表给出了默认的URL模式和它们能处理的URL请求示例。

默认URL模式

匹配URL示例

{controller}/{action}/{id}

http://server/application/Products/show/beverages

{resource}.axd/{*pathInfo}

http://server/application/WebResource.axd?d=...

  路由使用模式 {resource}.axd/{*pathInfo} 来阻止对网络文件的请求,例如WebReource.axd,ScriptResource.axd被传递给一个控制器。

  对于IIS7.0,可以不用扩展名。对于IIS6.0,你必须将扩展名.mvc添加到URL模式,如下所示:{controller}.mvc/{action}/{id}

三、      为Web Forms应用程序添加路由[Add Routes to a Web Forms Application]

  在Web Form应用中,你可以使用类RouteCollection的方法MapPageRoute(String, String, String) 创建路由。方法MapPageRoute创建Route对象并将其添加RouteCollection对象中。你需要为Route对象在参数在指定一些属性,用来传给方法MapPageRoute。

  通常情况下,你在方法中添加的路由会被Global.asax文件中Application_Start 方法处理器调用。这种方法确保了这些路由在应用程序启动时可以正常调用。它也允许你在为应用程序做单元测试时可直接调用该方法。当你在做单元测试时如果想要直接调用一个方法,该方法在注册时就必须是静态(Visual Basic中Shared)且有一个RouteCollection参数。

  下例中演示了Global.asax文件中添加一个Route对象,该对象定义了action和categoryName两个参数。URL中还定义了一个被定向到名为Categories.aspx的物理页面。

ASP.NET路由[ASP.NET Routing]ASP.NET路由[ASP.NET Routing]
protected void Application_Start(object sender, EventArgs e){  RegisterRoutes(RouteTable.Routes);}public static void RegisterRoutes(RouteCollection routes){  routes.MapPageRoute("",    "Category/{action}/{categoryName}",    "~/categoriespage.aspx");}

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:ASP.NET路由[ASP.NET Routing]

关键词:ASP.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。