我是mvc的新用户,我在这里尝试在网址格式中添加 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'""
"找不到活动控制器。"
请告诉我在哪里错过了。
答案 0 :(得分:0)
试试这个
public class ActivityController : ApiController
答案 1 :(得分:0)
您很可能已经启用了Web API,其路由在MVC路由之前注册。这意味着任何以api
为前缀的呼叫都会被路由到您的网络API,因为路由表中的第一个匹配胜出。
在项目中查找以下类
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
请注意DefaultApi
路线。
删除上述路由或更改MVC路由集合使用的路由。