ASP.NET MVC路由不能使用前缀" api"

时间:2017-07-24 03:28:15

标签: c# asp.net-mvc asp.net-routing

我是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'""
"找不到活动控制器。"

请告诉我在哪里错过了。

2 个答案:

答案 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路由集合使用的路由。