【发布时间】:2017-07-24 03:28:15
【问题描述】:
我是 mvc 新手,这里我尝试在 URL 模式中添加 api 前缀,后跟控制器、操作和 ID。
但事情并没有像我预期的那样工作。
我有一个名为“Activity”的控制器, 使用方法“查询”
public class ActivityController : Controller
{
...
[HttpGet]
public JsonResult Query(int limit = DEFAULT_LIMIT,
int offset = DEFAULT_OFFSET)
{
repository.apiInfo.data = repository.readActivities(limit, offset);
return Json(repository.apiInfo ,
JsonRequestBehavior.AllowGet);
}
...
}
我定义了一个路由映射规则来尝试调用 Query(),比如:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "MyRule",
url: "api/{controller}/{action}/{id}",
defaults: new { controller = "Activity", action = "Query", id = UrlParameter.Optional }
);
}
我已确保它已在 Application_Start() 方法中注册, 以及它在没有 api 前缀的情况下也能很好地工作。
但结果显示消息
“找不到网址'http://localhost:49571/api'”
“找不到 Activity 控制器。”
请告诉我我错过了哪里。
【问题讨论】:
-
您注册了
WebApi Controller吗?可能已经使用前缀api -
Api Controller 可以工作,但我不熟悉,所以我需要的方式是在 MVC 路由中工作,我不明白为什么它不像我从中学到的那样工作MVC 路由。
-
WebApi 路由在 MVC 路由之前运行,当你 url
/api进来时,webApi 的hander 会处理这个请求(这里是状态404,但它也是hander 的结果) , MVC 的路由永远不会被调用,但是你可以使用另一个前缀来处理 MVC 的路由
标签: c# asp.net-mvc asp.net-routing