不用asp.net MVC框架照样可以轻松实现MVC功能

j66 2009-06-01 10:15:09
Jexus web server既支持ASP.NET,也支持URL Rewrite,是一款跨平台的WEB服务器程序。利用Jexus强大的URL重写功能,无需ASP.NET MVC 框架就能轻松实现非常标准的MVC功能,而且更简捷、更自由。

示例如下:

假设:
地址“http://xxx.xx/m/”是访问首页
地址“http://xxx.xx/m/list”是访问商品列表页
地址“http://xxx.xx/m/list/car”是访问列表页中car这个子项目

物理路径:本例中所有文件放在网站根目录的mvc文件夹中。

具体实现过程如下:
一、配置网站
在site.conf配置文件的某个子站(设站名为abc)中添加:
#首页的“路由”
abc.rewrite=^/m/$ /mvc/index.aspx

#MVC“标准”路径的路由(全部指向/mvc/controller.aspx)
abc.rewrite=^/m/([\-/0-9a-zA-Z]{3,100}[^/])$ /mvc/controller.aspx?url=$1

#图片等静态文件的“路由”
abc.rewrite=^/m/images/(.+?)$ /mvc/images/$1
abc.rewrite=^/m/(.+?)/images/(.+?)$ /mvc/images/$2

二、“控制器”设计
文件名为:controller.aspx(当然也可以是其它文件名,只要与URL Rewrite所定义的文件名相同就行),放到mvc文件夹中
文件内容如下:
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Web" %>
<%
//分解MVC RUL路径
string urlPath = Request.QueryString["url"];
if (String.IsNullOrEmpty(urlPath) || urlPath == "")
{
Response.Write("Url Error!");
Response.End();
}


string[] workList = urlPath.Split(new char[] { '/' });

//根据URL路径的实际内容,执行对应的操作
if (workList.Length == 1)
{
switch (workList[0].ToLower())
{
case "list":
Server.Execute("list.aspx");
break;

default:
Server.Execute("index.aspx");
break;
}
}

if (workList.Length == 2)
{
string work = workList[0].ToLower();
string qString = workList[1];

switch (work)
{
case "list": // 如:/list/car
Server.Execute("list.aspx?id=" + qString);
break;

/*.......*/

default: //其它的
Server.Execute("index.aspx");
break;

}

}

Response.End();

%>

三、针对“控制器”的中自定义的内容,建立“index.aspx”和“list.aspx”,全部放到mvc目录中。
index.aspx文件内容如下:
<%@ Page Language="C#" %>
<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>首页</title>
</head>

<body>

<p>这是首页</p>
<hr />
<p><a target="_blank" href="list">列表页</a></p>
<p><a target="_blank" href="list/car">列表页加参数</a></p>

</body>

</html>

list.aspx文件内容如下:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web" %>
<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>列表页</title>
</head>

<body>
<p>这是列表页</p>
<hr />
<p>
<%
string q = Request.QueryString["id"];
Response.Write("得到的参数是:" + q);
%>
</p>
</body>

</html>

重启jexus,访问一下,试试。
怎么样,的的确确是非常标准的MVC吧,而且,在设计上一点难度也没有,还有比它更简单更自由的MVC框架吗!

用Jexus实现MVC的最大优点如下:
1,对ASP.NET版本没有特殊要求,asp.net 1.1/2.0/3.0/3.5都可以用;
2,无需安装和学习asp.net mvc框架,不必改变asp.net编程习惯;
3,已经设计好的asp.net网站,仅需加一个“控制器”就基本上可以实现MVC格式的访问,除了对超链接等等内容作一些小的修改之外,根本不需要重新设计整个网站;
4,不用MVC名字空间和与之相关的程序集,MVC路由等功能在web服务器层面直接实现,因此,这种MVC实现方式较之其它实现方式的执行效率更高。
5,可以在网站设置中禁止用户访问真实的网站路径;
6,设计非常自由,布置非常灵活。

注:Jexus下载地址:linux.j66.net 或 www.j66.net

...全文
562 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanshuyi 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dc5858518 的回复:]
欢迎各位加入ASP.NET MVC框架超级群!让我们共同学习、进步!QQ群号:40985466

非常乐意为大家提供一个良好的交流平台!
[/Quote]

不让加了?!
dc5858518 2009-12-16
  • 打赏
  • 举报
回复
欢迎各位加入ASP.NET MVC框架超级群!让我们共同学习、进步!QQ群号:40985466

非常乐意为大家提供一个良好的交流平台!
tellmethefuture 2009-06-03
  • 打赏
  • 举报
回复
http://www.iis.net/extensions/URLRewrite
tellmethefuture 2009-06-03
  • 打赏
  • 举报
回复
这个需要安装第三方软件包

我觉得没有直接用Microsoft IIS7的扩展包好

有一个就是URL重写的 扩展组件

很好用
可以访问 http://www.microsoft.com/web 瞅瞅
pb_stu 2009-06-03
  • 打赏
  • 举报
回复
学习
itrefer 2009-06-03
  • 打赏
  • 举报
回复
MARK
j66 2009-06-02
  • 打赏
  • 举报
回复
补充一点,以上示例,在linux和windows系统都已测试通过。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧