使用MVC项目

时间:2016-05-12 10:30:01

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

我在我的MVC项目中添加了一个Api控制器。并进行了以下更改:

我的WebApiConfig

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "GetFirms",
                routeTemplate: "api/B2bApi/GetFirms",
                defaults: new { controller =  "B2bApiController", action= "GetFirms" });
        }
    }

我在Global.asax(最后一行)注册此路线

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    GlobalConfiguration.Configure(WebApiConfig.Register);
}

我检查了调试后发现我的路线已注册。所以这是我的控制器:

public class B2bApiController : ApiController
    {
        [HttpGet]
        public string GetFirms()
        {
            return "test";
        }
    }

当我导航到

  

/ API / B2bApi / GetFirms

我正在

  

404错误

注册api路由的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

如果 asp.net-mvc-4

WebApiConfig.Register(GlobalConfiguration.Configuration);

如果 asp.net-mvc-5和asp.net-web-api-2

GlobalConfiguration.Configure(WebApiConfig.Register); 

必须放在

之上
RouteConfig.RegisterRoutes(RouteTable.Routes);

示例:

protected void Application_Start()
{
     AreaRegistration.RegisterAllAreas();

     //GlobalConfiguration.Configure(WebApiConfig.Register); // use if mvc5       
     WebApiConfig.Register(GlobalConfiguration.Configuration); // use if mvc4
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
     RouteConfig.RegisterRoutes(RouteTable.Routes);
     BundleConfig.RegisterBundles(BundleTable.Bundles);
}

答案 1 :(得分:1)

我假设您正在为WebApi创建一个单独的项目。

如果我没错,您还没有在WebApiConfig注册Global.asax

删除此

   RouteConfig.RegisterRoutes(RouteTable.Routes);

并添加

WebApiConfig.Register(GlobalConfiguration.Configuration);

看起来像 -

enter image description here

答案 2 :(得分:0)

为默认值指定控制器时,请在控制器名称中删除关键字“controller”。

    config.Routes.MapHttpRoute(
        name: "GetFirms",
        routeTemplate: "api/B2bApi/GetFirms",
        defaults: new { controller = "B2bApi", action = "GetFirms" });

正如其他人所说,将你的登记册移到顶部。

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}