ASP.NET MVC3的伪静态实现代码

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制作伪静态地址

  1. 创建一个MVC应用程序,例如命名为mysite。
  2. 打开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映射的命名空间
    );
}
  1. 在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();
    }
}
  1. 将URL重写到静态地址,例如:
http://localhost:8080/Product/1.html
  1. 打开IIS管理器并导航到mysite,选择URL重写并创建一个新规则。定义一个规则,将请求重写为:
http://localhost:8080/Product/Category/1.html
  1. 在新规则中,定义输出的规则:
<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路由制作伪静态地址

  1. 创建一个MVC应用程序,例如命名为mysite。
  2. 打开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" }
    );
}
  1. 在mysite的Controllers文件夹中,创建一个名为CategoryController和ProductController的控制器类。

  2. 在mysite的Views文件夹中,创建一个名为Category和Product的文件夹。

  3. 创建相应的视图文件(例如,CategoryCategory.aspx和ProductIndex.aspx)。

  4. 使用以下代码编写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技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • MSSQL 2008 自动备份数据库的设置方法

    下面是详细讲解“MSSQL 2008 自动备份数据库的设置方法”的完整攻略: 1. 查看当前数据库的备份类型 在开始设置自动备份之前,需要先查看当前数据库的备份类型,以便确定需要设置的备份方式。可以通过以下代码在 SQL Server Management Studio 的查询窗口中执行来查看: USE master GO SELECT [name], re…

    C# 2023年6月2日
    00
  • VS2015中C#版本6.0的新特性 你需要知道

    VS2015 中 C# 版本 6.0 的新特性 简介 C# 6.0 是一种微软为.NET Framework所开发的编程语言,是.NET开发领域的主流语言之一,在 VS2015 中提供了许多新的语言特性,包括NULL条件运算符、字符串插值、表达式体成员等。本文将会详细介绍 VS2015 中C# 6.0 的新特性。 NULL 条件运算符 NULL 条件运算符是…

    C# 2023年6月1日
    00
  • .NET中的IO操作之文件流用法分析

    当涉及到文件或者文件夹的操作时,我们就要使用文件流。文件流是.NET框架中常用的IO流之一,用于在程序与文件之间传输数据。在本文中,我将详细介绍文件流的使用方法,并提供两个示例。 文件流的基本使用方法 文件流的基本使用步骤如下: 打开或创建文件流 通过读取或写入方法读取或写入数据 关闭文件流 示例代码: using System.IO; // 打开或创建文件…

    C# 2023年5月31日
    00
  • c#通过进程调用cmd判断登录用户权限代码分享

    下面是详细的攻略: 1. 什么是进程调用? 进程调用是指一个程序调用另一个程序的过程。在操作系统中,每个程序都有一个进程 ID(PID),可以用这个 PID 来识别程序。进程调用可以用来执行一些和本程序无关的任务,比如打开新程序、关闭进程、执行命令等。 2. 怎样通过进程调用 cmd? 在 C# 中,可以通过 Process 类来操作进程。Process.S…

    C# 2023年5月15日
    00
  • C#、vb.net及SQL判断指定年份是否为闰年的方法

    C#、VB.NET和SQL都支持判断指定年份是否为闰年的方法,下面是具体的攻略。 C#实现闰年判断 C#中实现闰年判断的方法是使用DateTime.IsLeapYear静态方法。具体实现如下: int year = 2020; if(DateTime.IsLeapYear(year)) { Console.WriteLine("{0} is a l…

    C# 2023年6月1日
    00
  • 一篇文章彻底搞清楚c#中的委托与事件

    一篇文章彻底搞清楚C#中的委托与事件 委托 委托(Delegate)是一种类型,它可以持有函数的引用并执行这个函数。通过委托,我们可以在不知道函数名的情况下,直接访问和执行函数。 定义 在C#中,委托是定义在类的外部,但是要在类的内部定义具体的委托实例。委托的定义格式如下: public delegate void DelegateName(paramete…

    C# 2023年6月7日
    00
  • C# lambda表达式应用如何找出元素在list中的索引

    C#中的Lambda表达式可以用来简化以往需要编写一些冗长代码的情况,其中之一就是在List中找出元素的索引。下面是完整的攻略: 1. Lambda表达式 Lambda表达式的语法格式为: (parameters) => expression OR statement block 引号中的parameters表示输入参数,箭头“=>”表示将输入参…

    C# 2023年6月6日
    00
  • c#利用Session对象实现购物车的方法示例

    下面就详细讲解如何利用Session对象实现C#购物车的方法。 1. Session对象的介绍 Session对象用于存储在用户访问web应用程序期间的临时数据。在用户访问web浏览器时,Session对象为每个用户创建一个唯一的会话ID。这个ID可以被存储在客户端cookie中,以便它可以被web浏览器发送回服务器来检索Session对象。 2. 创建一个…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部