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日

相关文章

  • ASP.NET Core中Grpc通信的简单用法

    在ASP.NET Core中,gRPC是一种高性能、跨平台的远程过程调用(RPC)框架。以下是ASP.NET Core中gRPC通信的简单用法的完整攻略。 环境准备 在使用ASP.NET Core中gRPC通信前,需要确保以下环境已经准备好: .NET Core SDK已经安装。 项目中已经添加了引入的包的依赖。 实现gRPC通信 以下是ASP.NET Co…

    C# 2023年5月15日
    00
  • c# 数据标注与数据校验

    以下是“c# 数据标注与数据校验”的完整攻略: 什么是数据标注与数据校验 在C#中,数据标注和数据校验是用来确保输入数据的有效性的两个重要概念。数据标注可以将各种标记应用于数据,使得我们可以在数据类中定义该数据的元数据。而数据校验可以帮助保证数据符合特定的规则和限制条件,从而消除了由错误数据引起的问题。 数据标注详解 什么是数据标注 数据标注是一种将标记应用…

    C# 2023年5月31日
    00
  • c# 使用Task实现非阻塞式的I/O操作

    下面是详细讲解“c# 使用Task实现非阻塞式的I/O操作”的完整攻略。 简介 在进行I/O操作时,如果我们在单线程中进行了阻塞式I/O操作,那么在I/O等待时间内,该线程无法执行其他操作,导致I/O操作效率极低。因此,我们需要使用非阻塞的I/O操作,使得I/O操作的等待时间内能够执行其他操作,提高操作效率。 Task是.Net Framework和.Net…

    C# 2023年6月3日
    00
  • C#使用GET、POST请求获取结果

    获取在线数据是许多C#应用程序的重要部分,而HTTP协议上的GET和POST请求是两种常见的请求方式。在C#中,可以使用HttpWebRequest类和HttpClient类来发送GET和POST请求并获取响应结果。 使用HttpWebRequest发送GET请求 HttpWebRequest是一个用于发送HTTP请求的类,可以用来发送GET、POST和其他…

    C# 2023年5月31日
    00
  • C#基于委托实现多线程之间操作的方法

    “C#基于委托实现多线程之间操作的方法”指的是在多线程开发中,使用委托实现线程间的通信和数据交互。下面是使用委托实现多线程之间操作的方法攻略: 1. 创建委托 首先要创建一个委托类型,来定义需要在不同线程之间传递的方法: delegate void MyDelegate(object obj); 这个委托类型可以传递一个对象,可以应用于各种类型的方法。 2.…

    C# 2023年6月7日
    00
  • 在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装

    [源代码地址https://github.com/junkai-li/NetCoreKevin]基于NET6搭建跨平台WebApi架构支持单点登录、多缓存、自动任务、分布式、多租户、日志、授权和鉴权 、网关 注册与发现、CAP集成事件、领域事件、 docker部署 **首要要理解什么是领域事件?**领域事件是指发生在特定领域中的事件,是你希望在同一个领域中其…

    C# 2023年5月9日
    00
  • ASP.NET MVC前台动态添加文本框并在后台使用FormCollection接收值

    下面是“ASP.NET MVC前台动态添加文本框并在后台使用FormCollection接收值”的完整使用攻略,包括创建视图、创建控制器和两个示例。 步骤1:创建 ASP MVC 项目 在 Visual Studio 中创建名为“DynamicTextBoxDemo”的 ASP.NET MVC 项目。 步骤2:创建视图 在 Views 文件夹中创建为“Ind…

    C# 2023年5月12日
    00
  • WEB API .NET环境发布

    1、创建WEBAPI 1 using Dapper; 2 using MesErp.Models; 3 using Microsoft.AspNetCore.Mvc; 4 using Microsoft.Extensions.Configuration; 5 using Newtonsoft.Json; 6 using System; 7 using Sys…

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