从MVC 5应用程序调用Web API 2时出现404错误

时间:2015-05-26 05:36:05

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

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

3 个答案:

答案 0 :(得分:4)

问题已经解决。这是因为App_Start文件夹中缺少var app = angular.module("app",[]); app.directive("myDir",function(){ return { restrict: 'E', replace: true, link: function (scope, iElement, iAttrs) { var svg = angular.element('<circle cx="10" cy="10" r="50"/>'); iElement.append(svg); }, template:'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="200"><image x="0" y="0" width="400" height="200" xlink:href="http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png"/></svg>' } }); 文件。我手动添加了文件。

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

公共类WebApiConfig     {         public static void Register(HttpConfiguration config)         {             // 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&#34;从您的区域文件夹中WEBAPI,否则它将无法正常工作!

适合我,MVC 5