【问题标题】:Getting 404 error while calling Web API 2 from MVC 5 application从 MVC 5 应用程序调用 Web API 2 时出现 404 错误
【发布时间】:2015-08-07 15:16:16
【问题描述】:

我正在使用 Web API 2 和实体框架开发 ASP.Net MVC 5 应用程序。我创建了一个带有动作的 WEB API 2 控制器,使用名为 EmployeeAPIController 的实体框架 并使用 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的初学者。请帮忙。

【问题讨论】:

  • 尝试从您尝试在 AJAX 调用中使用的网址中取出第一个正斜杠。
  • 您已经发布了RouteConfig 文件,您能找到WebApiConfig 吗?
  • 同时发布您试图调用的 api 控制器的操作方法。
  • url: "/api/EmployeeAPI" 改为url: "../api/EmployeeAPI",
  • @MokshShah 我在哪里可以找到WebApiConfig?我的 Action 方法是 'public IQueryable GetEmployees() { return db.Employees; } '

标签: asp.net-mvc entity-framework asp.net-mvc-5 asp.net-web-api asp.net-web-api2


【解决方案1】:

问题已解决。这是因为 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);
        }
    }

它对我有用。谢谢大家的回复。

【讨论】:

    【解决方案2】:

    你应该在你的 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()
            {
                ....
            }
        }
    

    【讨论】:

    • 为了回答他的问题,移除 XML 格式化程序有什么意义?它没有做任何有用的事情(除了从普通的 chrome 调用中获取 json)。
    【解决方案3】:

    问题已解决。这是由于 App_Start 文件夹中缺少 WebApiConfig.cs 文件。我已经手动添加了文件。

    公共类 WebApiConfig { 公共静态无效寄存器(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);
        }
    }
    

    !!IMPORTANT!!还有一件事,从您的 WEBAPI 所在区域文件夹中删除 xxxxxxAreaRegistration.cs",否则将无法正常工作!

    为我工作,MVC 5

    【讨论】:

      猜你喜欢
      • 2014-04-19
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多