Рекомендуемый дизайн API с ASP.NET MVC3 - PullRequest
3 голосов
/ 02 декабря 2011

Я работаю с ASP.NET MVC 3. Я немного новичок в этом.Я думаю, что начинаю понимать это.Но есть кое-что, что я пытаюсь сделать, что, я думаю, имеет смысл, но, возможно, я ошибаюсь.

Я пытаюсь создать API вокруг объектов Order в моей базе данных.Чтобы получить все заказы в системе, я собирался представить API, который выглядит следующим образом:

/ orders /

В тех случаях, когда я хотел получить конкретный заказЯ бы просто добавить идентификатор.Другими словами, URL-адрес будет выглядеть следующим образом:

/ orders / 12345

Чтобы сделать это, я создал следующий контроллер:

public class OrdersController : Controller
{
    // GET: /Orders/
    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Index()
    {
        string result = "list of orders";
        return Json(result, JsonRequestBehavior.AllowGet);
    }

    //
    // GET: /Orders/{orderID}
    public ActionResult Index(int id)
    {
        string result = "order:" + id;
        return Json(result, JsonRequestBehavior.AllowGet);
    }
}

Inмой класс AreaRegistration, у меня есть следующее:

  public override void RegisterArea(AreaRegistrationContext context)
  {
    context.MapRoute(
      "OrderList",
      "{controller}/{action}",
        new { action = "Index", controller="Orders" }
    );

    context.MapRoute(
      "Order",
      "{controller}/{action}/{id}",
      new { action = "Index", controller = "Orders" }
    );
  }

Когда я пытался получить доступ к "/ orders /" через адресную строку браузера, я получаю JSON, как и ожидалось.Однако, если я пытаюсь получить доступ к "/ orders / 12345", я получаю 404. Чего мне не хватает?

Спасибо

1 Ответ

4 голосов
/ 02 декабря 2011

Вам также необходимо определить правильные маршруты в global.asax или использовать маршрут по умолчанию, который выглядит как {controller}/{action}/{id}, где контроллер по умолчанию установлен на «Home», действие по умолчанию - «Index», а id не является обязательным.

То есть /orders работает, потому что вы определили контроллер (заказы), действие по умолчанию (индекс) и пропущенный идентификатор (что не имеет значения, поскольку это необязательно)

Но когда вы пытаетесь /orders/12345, тогда вы определяете контроллер (приказы), действие (12345) и пропущенный идентификатор

Таким образом, чтобы это работало только с маршрутом по умолчанию, запрос должен быть /orders/index/12345

edit: для регистрации маршрутов области следует использовать класс AreaRegistration

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...