【问题标题】:Unable to hit Web API 2 controller in MVC Project无法在 MVC 项目中访问 Web API 2 控制器
【发布时间】:2019-01-06 14:22:01
【问题描述】:

我无法使用 ASP.Net Web API 2 控制器访问我在 MVC 项目中编写的 API。

localhost:57323/api/billpayment/getbillers/10 有效,但 localhost:57323/api/billpayment/getbillers 无效。

WebAPI.config

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

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

Global.asax

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

【问题讨论】:

  • doesn't works 是什么意思?你得到404? 500?
  • @trailmax 得到 404
  • 您还有其他GetBillers 方法吗?
  • @Liam 没有其他 GetBillers 方法
  • 尝试从 global.asax 中隐藏RouteConfig.RegisterRoutes(RouteTable.Routes); 然后测试一次

标签: c# asp.net-web-api asp.net-web-api2 asp.net-web-api-routing


【解决方案1】:

由于路由的配置方式,您遇到了路由冲突。

Web API 路由需要在标准 MVC 路由之前添加到路由表中。

更新

public class MvcApplication : System.Web.HttpApplication {
    protected void Application_Start() {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register); //<-- This MUST come before
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes); //<-- THIS to avoid conflicts
        BundleConfig.RegisterBundles(BundleTable.Bundles);        
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多