asp.net 网络 api 使用 angularJS 调用自定义方法

asp.net web api call custom method using angularJS

我有一个 angularJS 控制器,我在其中放置了一个 kendo 级联 dropdownlist.For 下拉列表值,在 kendo 数据源上读取我正在调用网络 api 服务。 对于第一个字段,已调用 api GetDivisions() 并且它也响应,但对于第二个值,未调用 GetCascadeDistrict() 方法,再次调用 GetDivisions() 方法。我该如何解决this.Need求助

这是带有 kendo 级联下拉列表的 angular 控制器。

app.controller("filterCtrl", function($scope, $sce,$http) {
var i;
$scope.dashImgSrc = $sce.trustAsResourceUrl('Content/Images/Bangladesh_Govt.gif');

$(document).ready(function () {

    var divisions = $("#divisions").kendoComboBox({
        filter: "contains",
        placeholder: "select a divisions...",
        dataTextField: "Name",
        dataValueField: "Id",
        animation: {
          close: {
              effects: "zoom:out",
              durations:250
          }  
        },
        dataSource: {
            type: "json",
            serverFiltering: true,
            transport: {
                read: "api/AreaService/GetDivisions()"
            }
        },
        change: function () {
            i = divisions.value();
            alert("1st hit"+i);
        }
    }).data("kendoComboBox");


    var districts = $("#districts").kendoComboBox({
        autoBind: false,
        cascadeFrom: "divisions",
        filter: "contains",
        placeholder: "select a district",
        dataTextField: "Name",
        dataValueField: "Id",
        dataSource: {
            type: "json",
            serverFiltering: true,
            transport: {
                read: function () {

                    alert("2nd hit");

                    //$http.get("/api/AreaService/GetCascadeDistrict(i)").success(function() {
                    //    alert("Hit the district api");
                    //}).error(function() {
                    //    alert("Error");
                    //});

                    $http({ method: "GET", url: 'api/AreaService/GetCascadeDistrict(i)' }).
                        success(function() {
                            alert("Actually it hit the custome get method");
                        }).
                        error(function() {
                            alert("Not hit or other problem");
                        });


                }
            }
        }


    }).data("kendoComboBox");


    var upazila = $("#upazila").kendoComboBox({
        autoBind: false,
        cascadeFrom: "districts",
        filter: "contains",
        placeholder: "select a  upazila...",
        dataTextField: "Name",
        dataValueField: "Id",
        dataSource: {
            type: "json",
            serverFiltering: true,
            transport: {
                read: function() {
                    $http.get("/api/AreaService/GetCascadeDistrict(i)").success(function() {

                    }).error(function() {

                    });
                }
            }
        }
    }).data("kendoComboBox");

    $("#get").click(function () {
        var divisionInfo = "\Division: { id: " + divisions.value() + ", name: " + divisions.text() + " }",
            districtInfo = "\nDistrict: { id: " + districts.value() + ", name: " + districts.text() + " }",
            upazilaInfo = "\nUpazila: { id: " + upazila.value() + ", name: " + upazila.text() + " }";

        alert("Road details:\n" + divisionInfo + districtInfo + upazilaInfo);
    });
});

});

Web api 就在这里

public class AreaServiceController : ApiController
{
    private readonly AreaFilterManager _db = new AreaFilterManager();

    [System.Web.Http.HttpGet]
    public IEnumerable<Division> GetDivisions()
    {
        return _db.GetDivisions();
    }

    [System.Web.Http.HttpGet]
    public IEnumerable<District> GetCascadeDistrict(int? division)
    {
        return _db.GetCascadeDistrict(division);
    }

    [System.Web.Http.HttpGet]
    public IEnumerable<Thana> GetCascadeUpzilla(int? district)
    {
        return _db.GetCascadeThana(district);
    }

}

您需要 separate/distinguish 通过 CRUD operations or by Attribute Routing 调用取决于您在项目中使用的 WebApi 版本。

您不能在同一个 Class/Controller 中两次使用相同的 CRUD HttpGet 而不放置不同的路由属性。

您需要记住,在 WebApi 中,方法不像在常规编程中那样通过名称调用,因此 WebApi Class/Controller 不知道您指的是哪个方法从您的客户那里打电话(在您的情况下)。

这就是为什么您需要:

WebApi 第 1 版:separate/distinguish 您的电话由 CRUD 操作。

WebApi 第 2 版:separate/distinguish 你的电话来自 Attribute Routing.