Asp.net MVC学习日记五(自定义RouteHandler)

本文介绍如何在Global.asax中添加自定义路由处理器,实现基于路径的RESTful风格控制器操作。通过在特定目录下创建CatalogRouteHandler类,该类继承自IRouteHandler,能够解析路径并根据命令(GET, DELETE, EDIT, POST)调用相应的Action方法。在HomeHandler中实现这些Action方法,并为每个Action添加对应的视图。访问时通过路径参数(如Home/Edit)触发相应操作。

1、Global.asax中添加

routes.MapRoute("DbContent", "{*path}",new { controller = "Home" }).RouteHandler = new CatalogRouteHandler();

2、在Controller文件夹下,添加CatalogRouteHandler类,让其继承自IRouteHandler

public class CatalogRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
string path = requestContext.RouteData.Values["path"] as string;

if (path == null)
{
requestContext.RouteData.Values["action"] = "Index";
//add the path minus the command back in
//requestContext.RouteData.Values["path"] = path;
}
else
{

//remove trailing slash if there is one
if (path.EndsWith("/"))
path = path.Substring(0, path.Length - 1);
if (path != null && path.Contains("/")) //valid path parameter
{
int lastIndex = path.LastIndexOf('/');
if (lastIndex >= 0)
{
string commandName = path.Substring(lastIndex + 1);


switch (commandName.ToUpper())
{
case "GET": //get the catalog item
requestContext.RouteData.Values["action"] = "Get";
//add the path minus the command back in
requestContext.RouteData.Values["path"] = path.Substring(0, lastIndex);
break;
case "DELETE": //delete catalog item
requestContext.RouteData.Values["action"] = "Delete";
//add the path minus the command back in
requestContext.RouteData.Values["path"] = path.Substring(0, lastIndex);
break;
case "EDIT": //edit catalog item
requestContext.RouteData.Values["action"] = "Edit";
//add the path minus the command back in
requestContext.RouteData.Values["path"] = path.Substring(0, lastIndex);
break;
case "POST": //save catalog item (insert/update)
requestContext.RouteData.Values["action"] = "Post";
//add the path minus the command back in
requestContext.RouteData.Values["path"] = path.Substring(0, lastIndex);
break;
default: //we will allow nothing to act as a GET
requestContext.RouteData.Values["action"] = "Get";
//add the path minus the command back in
requestContext.RouteData.Values["path"] = path;
break;
}

}
}
}

return new MvcHandler(requestContext);
}
}

3、在HomeHandler.cs分别添加Get,Delete,Edit,Post的Action。并添加其对应视图

public ActionResult Get(string path)
{
return View();
}
public ActionResult Delete(string path)
{
return View();
}
public ActionResult Post(string path)
{
return View();
}
public ActionResult Edit(string path)
{
return View();
}

访问的时候加上Home,如http://loaclhost:1124/Home/Edit

ok.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值