.NET MVC:使用动作属性映射路由

时间:2011-01-10 18:31:28

标签: asp.net-mvc asp.net-mvc-2 url-routing

我对MVC很陌生,无法以这种或那种方式找到这个问题的答案。 MVC 1(或者我认为是2)中是否有内置架构,允许您通过特定操作方法的属性而不是Global.asax指定路由映射?我可以看到它的使用仅限于一定程度,因为多个方法可以绑定到相同的操作,因此需要不必要地重复路由,但我的问题仍然存在。

另外,除了我刚才提到的关于多种方法的相同操作的那个之外,有没有人看到实现这样的东西的任何问题?

注意:我不是要求 HOW 来实现这一点。只检查是否存在这样的东西,如果没有,是否比它的价值更麻烦。

2 个答案:

答案 0 :(得分:4)

您还可以尝试通过AttributeRouting提供的NuGet。披露 - 我是项目作者。我已经在个人和专业项目中使用了这个并取得了巨大的成功,并且不会回到ASP.NET MVC的默认路由机制,除非我不得不这样做。看看github wiki。那里有许多功能的大量文档。

简单用法如下:

public class RestfulTestController : Controller
{
    [GET("Resources")]
    public ActionResult Index()
    {
        return Content("");
    }

    [POST("Resources")]
    public ActionResult Create()
    {
        return Content("");
    }

    [PUT("Resources/{id}")]
    public ActionResult Update(int id)
    {
        return Content("");
    }

    [DELETE("Resources/{id}")]
    public ActionResult Destroy(int id)
    {
        return Content("");
    }
}

AttributeRouting是高度可配置的,并且有一些扩展点。看看吧。

答案 1 :(得分:1)

我会为此推荐ASP.NET MVC Attribute Based Route Mapper。这是第三方库,不附带ASP.NET MVC 1或2.用法如下:

public SiteController : Controller
{
    [Url("")]
    public ActionResult Home()
    {
        return View();
    }

    [Url("about")]
    public ActionResult AboutUs()
    {
        return View();
    }

    [Url("store/{category?}")]
    public ActionResult Products(string category)
    {
        return View();
    }
}

然后在global.asax中,您只需致电routes.MapRoutes()注册您的行动路线。

实现这一点很简单。