【问题标题】:ASP.NET MVC Routing doesn't work with a prefix "api"ASP.NET MVC 路由不适用于前缀“api”
【发布时间】: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


【解决方案1】:

您很可能已经启用了 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 路由集合使用的路由。

【讨论】:

    【解决方案2】:

    试试这个

    public class ActivityController : ApiController
    

    【讨论】:

    • Api Controller 可以工作,但我不熟悉,所以我需要的方式是在 MVC 路由中工作,我不明白为什么它不像我从中学到的那样工作MVC 路由。
    猜你喜欢
    • 2018-01-07
    • 2016-06-19
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多