无法在 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 控制器的主要内容,如果未能解决你的问题,请参考以下文章
从 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