2

サーバーからのデータの送受信に 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 }
                    );
    }

グローバル.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;
});
}

「Services/LoadMetadata」の $http.post でエラー 404 が発生しました。ルートを使用していくつかのバージョンを試しました-同じエラー404.何か助けはありますか?

4

1 に答える 1

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}"
    );
于 2014-10-20T11:18:29.127 に答える