[英]ASP.NET MVC Routing doesn't work with a prefix “api”
我是mvc的新手,在这里,我尝试在URL模式中添加api前缀,后跟控制器,操作和ID。
但是事情并没有像我预期的那样。
我有一个名为“ Activity”的控制器,其方法为“ Query”
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前缀的情况下也可以正常运行。
但是事实证明消息
“找不到URL'http:// localhost:49571 / api '”
“找不到活动控制器。”
请告诉我我在哪里错过了。
试试看
public class ActivityController : ApiController
您很可能已经启用了Web API,其路由在MVC路由之前注册。 这意味着,以api
为前缀的所有调用都将被路由到您的Web 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路由集合正在使用的路由。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.