【问题标题】:Web Api 404 error The resource cannot be foundWeb Api 404 错误 找不到资源
【发布时间】:2014-12-15 06:48:36
【问题描述】:

我尝试使用 Web Api 从服务器发送/获取数据。 WebApiConfig.cs:

    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{action}"
        );

RouteConfig.cs:

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 }
                    );
    }

Globa.asax.cs:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        GlobalConfiguration.Configure(WebApiConfig.Register);

    }

API 控制器(ServicesController.cs):

public class ServicesController : ApiController
{

    public List<TreeMenuItem> LoadMetadata()
    {
        List<TreeMenuItem> itemsMenu = new List<TreeMenuItem>();
        TreeMenuItem dataSource = new TreeMenuItem("1", "DataSources", null);
        itemsMenu.Add(dataSource);
        return itemsMenu;
    }
}

我正在尝试从 angularJS 控制器访问 api,如下所示:

angular.module("App", ["ngRoute", "ngResource"])
.controller('MainController', ["$scope", "$http", MainController]);

function MainController($scope, $http) {
var baseUrl = "Services/LoadMetadata";
var params = {};
$http.post(baseUrl, params)
    .then(function (data) {
        $scope.roleList = data.data;
});
}

我在“服务/加载元数据”的 $http.post 上收到错误 404! 我使用路由尝试了一些版本-相同的错误 404。 有什么帮助吗?

【问题讨论】:

  • 在路由注册前尝试注册webapi
  • 太棒了。现在好了。 :-)。
  • 很遗憾,我无法将您的评论标记为回答。

标签: angularjs asp.net-web-api angularjs-http


【解决方案1】:

更改注册顺序...

    GlobalConfiguration.Configure(WebApiConfig.Register);  
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

在 route-config 之前注册 web-api-config,因为我猜 route-config 正在干预 web-api-config...

还请考虑让所有 api 调用都以 api 为前缀的标准做法。

  config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}"
    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2019-06-21
    • 2013-04-25
    • 1970-01-01
    • 2018-01-03
    • 2022-07-28
    相关资源
    最近更新 更多