ASP.NET MVC是一种Web应用程序开发框架,它强调了分离应用程序规模、健硕性以及可扩展性及可接受性。为了增强SEO搜索引擎优化的效果,伪静态技术应运而生。下面介绍ASP.NET MVC3的伪静态技术的实现方法:
第一步:打开Global.asax.cs文件
在MVC项目中,可以打开Global.asax.cs文件。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
}
第二步:修改RegisterRoutes方法
在修改RegisterRoutes方法之前,请在项目根目录下找到web.config文件,并将以下代码添加到中间:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<rewrite>
<rules>
<rule name="Rewrite to index">
<match url="^(.*)$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:0}" />
</rule>
</rules>
</rewrite>
</system.webServer>
以下是修改后的RegisterRoutes方法的代码:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{resource}.htm/{*pathInfo}");
routes.IgnoreRoute("{resource}.html/{*pathInfo}");
routes.IgnoreRoute("{resource}.php/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = "" }, // 参数默认值
new[] { "Namespace.Controllers" } // controller映射的命名空间
);
}
第三步:启用IIS URL Rewriting
启用IIS URL Rewriting。下面是一个URL重写示例。在默认情况下,URL为:
http://localhost:8080/Product/Category?CategoryID=1
通过重写,可将URL转换为静态格式,变为:
http://localhost:8080/Product/1.html
启用IIS URL Rewriting需要确保已安装IIS URL Rewriting扩展。在下载并安装成功后,在IIS管理器中,选择你的应用程序,双击IIS URL Rewrite,单击添加规则,创建重写规则并单击完成。
示例1:使用IIS Rewrite制作伪静态地址
- 创建一个MVC应用程序,例如命名为mysite。
- 打开mysite的Global.asax.cs文件,将RegisterRoutes方法修改为下面的代码:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{resource}.htm/{*pathInfo}");
routes.IgnoreRoute("{resource}.html/{*pathInfo}");
routes.IgnoreRoute("{resource}.php/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = "" }, // 参数默认值
new[] { "mysite.Controllers" } // controller映射的命名空间
);
}
- 在mysite的Controllers文件夹中,创建一个名为ProductController的控制器类,该类包含以下代码:
public class ProductController : Controller
{
public ActionResult Category(int CategoryID)
{
// do something
return View();
}
public ActionResult Product(int ID)
{
// do something
return View();
}
}
- 将URL重写到静态地址,例如:
http://localhost:8080/Product/1.html
- 打开IIS管理器并导航到mysite,选择URL重写并创建一个新规则。定义一个规则,将请求重写为:
http://localhost:8080/Product/Category/1.html
- 在新规则中,定义输出的规则:
<rule name="Product Rewrite Rule" stopProcessing="true">
<match url="^Product/([0-9]+).html$" />
<action type="Rewrite" url="/Product/Category?CategoryID={R:1}" />
</rule>
示例2:使用默认的MVC路由制作伪静态地址
- 创建一个MVC应用程序,例如命名为mysite。
- 打开mysite的Global.asax.cs文件并添加以下代码:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{resource}.htm/{*pathInfo}");
routes.IgnoreRoute("{resource}.html/{*pathInfo}");
routes.IgnoreRoute("{resource}.php/{*pathInfo}");
routes.MapRoute(
"ProductsCategory",
"{categoryname}/c{categoryid}.html",
new { controller = "Category", action = "Products", categoryid = "", categoryname = "" },
new[] { "mysite.Controllers" }
);
routes.MapRoute(
"ProductDetail",
"{categoryname}/p{productid}.html",
new { controller = "Product", action = "Index", productid = "", categoryname = "" },
new[] { "mysite.Controllers" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "mysite.Controllers" }
);
}
-
在mysite的Controllers文件夹中,创建一个名为CategoryController和ProductController的控制器类。
-
在mysite的Views文件夹中,创建一个名为Category和Product的文件夹。
-
创建相应的视图文件(例如,CategoryCategory.aspx和ProductIndex.aspx)。
-
使用以下代码编写CategoryController和ProductController控制器:
public class CategoryController : Controller
{
public ActionResult Products(string categoryid, string categoryname)
{
return View();
}
}
public class ProductController : Controller
{
public ActionResult Index(string productid, string categoryname)
{
return View();
}
}
简短的代码示例,请点击阅读更多。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET MVC3的伪静态实现代码 - Python技术站