从 MVC 5 应用程序调用 Web API 2 时出现 404 错误
Getting 404 error while calling Web API 2 from MVC 5 application
我正在使用 Web API 2 和 Entity Framework 开发 ASP.Net MVC 5 应用程序。我创建了一个 WEB API 2 Controller with actions,使用名为 EmployeeAPIController 的 Entity Framework 和使用 ajax 调用消耗 API,如下所示。
function loadEmployees() {
alert("In Load");
$.ajax({
type: "GET",
url: "/api/EmployeeAPI",
success: function (data) {
self.Message("Success");
self.Employees(data);
},
error: function (err) {
alert(err.status);
}
});
};
但我总是收到错误 404。我的 RouteConfig 文件配置为
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
404应该是什么原因。我是MVC和Web的初学者API。请帮忙。
你的 webapi.config 文件中应该有这个-
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
你应该有如下所示的 API 控制器-
public class EmployeeAPIController : ApiController
{
//
// GET: /API/EmployeeAPI/
/// <summary>
///
/// </summary>
/// <returns></returns>
public EmployeeListModel Get()
{
....
}
}
问题已解决。这是由于 App_Start 文件夹中缺少 WebApiConfig.cs
文件。我已经手动添加了文件。
public class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
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);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
对我有用。谢谢大家的回复。
问题已解决。这是由于 App_Start 文件夹中缺少 WebApiConfig.cs 文件。我已经手动添加了文件。
public class WebApiConfig
{
public static void Register(HttpConfiguration 配置)
{
// Web API 配置和服务
// Web API routes
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);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
!!重要!!还有一件事,请从您的区域文件夹中删除 xxxxxxAreaRegistration.cs" WEBAPI,否则它将无法工作!
适合我,MVC 5
我正在使用 Web API 2 和 Entity Framework 开发 ASP.Net MVC 5 应用程序。我创建了一个 WEB API 2 Controller with actions,使用名为 EmployeeAPIController 的 Entity Framework 和使用 ajax 调用消耗 API,如下所示。
function loadEmployees() {
alert("In Load");
$.ajax({
type: "GET",
url: "/api/EmployeeAPI",
success: function (data) {
self.Message("Success");
self.Employees(data);
},
error: function (err) {
alert(err.status);
}
});
};
但我总是收到错误 404。我的 RouteConfig 文件配置为
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
404应该是什么原因。我是MVC和Web的初学者API。请帮忙。
你的 webapi.config 文件中应该有这个-
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
你应该有如下所示的 API 控制器-
public class EmployeeAPIController : ApiController
{
//
// GET: /API/EmployeeAPI/
/// <summary>
///
/// </summary>
/// <returns></returns>
public EmployeeListModel Get()
{
....
}
}
问题已解决。这是由于 App_Start 文件夹中缺少 WebApiConfig.cs
文件。我已经手动添加了文件。
public class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
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);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
对我有用。谢谢大家的回复。
问题已解决。这是由于 App_Start 文件夹中缺少 WebApiConfig.cs 文件。我已经手动添加了文件。
public class WebApiConfig { public static void Register(HttpConfiguration 配置) { // Web API 配置和服务
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
并像
那样配置了Global.asaxpublic class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
!!重要!!还有一件事,请从您的区域文件夹中删除 xxxxxxAreaRegistration.cs" WEBAPI,否则它将无法工作!
适合我,MVC 5