无法在 MVC 项目中访问 Web API 2 控制器

Posted

技术标签:

【中文标题】无法在 MVC 项目中访问 Web API 2 控制器【英文标题】:Unable to hit Web API 2 controller in MVC Project 【发布时间】: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); 然后测试一次 【参考方案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);        
    

【讨论】:

以上是关于无法在 MVC 项目中访问 Web API 2 控制器的主要内容,如果未能解决你的问题,请参考以下文章

仍登录 MVC 站点,但无法调用 Web API

无法访问 MVC 6 API

从 ASP.NET MVC 项目调用 .NET CORE 5 Web API 微服务时无法检索 BadRequest 错误

无法使用具有多个参数的 MVC Web Api HttpPost 修饰操作

Access-Control-Allow-Origin - 多个域访问 MVC web api 2

带有 Facebook 访问令牌的 MVC 5 Web API 到 RegisterExternal,无需 Cookie