我正在使用ASP.NET MVC 3.我有点新手。我想我已经开始了解它。但是我想要做的事情,我认为是有道理的,但也许我错了。
我正在尝试在数据库中的Order对象周围创建API。为了获得系统中的所有订单,我将公开一个如下所示的API:
/命令/
如果我想获得特定订单,我只需附加一个ID。换句话说,URL将如下所示:
/命令/ 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);
}
}
在我的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.我错过了什么?
谢谢
答案 0 :(得分:4)
您还需要在global.asax
中定义正确的路由,或者使用默认路由,该路由看起来像{controller}/{action}/{id}
,其中控制器默认为“Home”,操作默认为“Index”,id是可选的。
所以/orders
有效,因为你已经定义了控制器(订单),默认操作(索引)和缺少的id(这无关紧要,因为它是可选的)
但是当您尝试/orders/12345
时,您已经定义了控制器(订单),操作(12345)和缺少ID
因此,为了使此工作仅使用默认路由,请求应为/orders/index/12345
编辑:对于注册区域路线,您应该使用AreaRegistration类