.NET MVC: сопоставление маршрута с использованием атрибута в действии - PullRequest
2 голосов
/ 10 января 2011

Я довольно новичок в MVC и не могу найти ответ так или иначе на этот вопрос. Существует ли встроенная архитектура в MVC 1 (или, я полагаю, 2), которая позволяет указывать сопоставление маршрутов с помощью атрибута для конкретного метода действия, а не в Global.asax? Я вижу, что его использование в некоторой степени ограничено, так как несколько методов могут быть привязаны к одному и тому же действию, что требует ненужного дублирования маршрутов, но мой вопрос все еще остается.

Кроме того, кто-нибудь видит какие-то ошибки в реализации чего-то подобного, кроме того, что я только что упомянул об одном и том же действии для нескольких методов?

Примечание : я не прошу КАК реализовать это. Только проверять, существует ли что-то подобное, а если нет, то это больше проблем, чем стоит.

Ответы [ 2 ]

4 голосов
/ 19 января 2011

Вы также можете попробовать 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 голос
/ 10 января 2011

Я бы порекомендовал ASP.NET MVC на основе атрибутов 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(), чтобы зарегистрировать маршруты действий.

Это просто реализовать.

...