C# getJSON不调用webAPI方法

C# getJSON不调用webAPI方法,c#,javascript,asp.net-mvc-4,knockout.js,asp.net-web-api,C#,Javascript,Asp.net Mvc 4,Knockout.js,Asp.net Web Api,我是MVC4和webAPI的新手,正在开发我的第一个应用程序。它是单页应用程序,使用Knockoutjs。我使用本演练 我的webAPI方法一切正常,当我使用Fiddler调用方法时,它返回正确的值。但当我从getJson()方法使用它时,它从未调用过。以下是我的HTML: <table id="nqsales" class="table table-striped table-hover table-condensed"> <thead>

我是MVC4和webAPI的新手,正在开发我的第一个应用程序。它是单页应用程序,使用Knockoutjs。我使用本演练
我的webAPI方法一切正常,当我使用Fiddler调用方法时,它返回正确的值。但当我从getJson()方法使用它时,它从未调用过。以下是我的HTML:

    <table id="nqsales" class="table table-striped table-hover table-condensed">
    <thead>
        <tr>
            <th>A</th>
            <th>B</th>
            <th>C</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: viewModel.nqsales">
        <tr>
            <td data-bind="text: a"></td>
            <td data-bind="text: b"></td>
            <td data-bind="text: c"></td> 
        </tr>
    </tbody>
    </table>
网络控制器

    // GET api/NQSale
    public IEnumerable<NQSaleDto> GetNQSales()
    {
        //return db.NQSales.AsEnumerable();
        return db.NQSales
            .AsEnumerable()
            .Select(nqlist => new NQSaleDto(nqlist));

    }
//获取api/NQSale
公共IEnumerable GetNQSales()
{
//返回db.NQSales.AsEnumerable();
返回db.NQSales
.可计算的()
.Select(nqlist=>newnqsaledto(nqlist));
}

我猜您的Url没有正确生成。如果当前视图中的Javascript是在一个单独的文件中@Url仅在其位于视图中时有效

您的Url结构

@Url.RouteUrl(“DefaultApi”,新的{httproute=”“,控制器= “NQSale”})

应生成一个URL“/api/NQSale”,这意味着您的控制器应为:

//The controller name relates to the route
    public class NQSaleController : ApiController
{
// The action name relates to the HttpVerb
    public IEnumerable<NQSaleDto> Get()
    {
        //return db.NQSales.AsEnumerable();
        return db.NQSales
            .AsEnumerable()
            .Select(nqlist => new NQSaleDto(nqlist));

    }
}
//控制器名称与路由相关
公共类NQSaleController:ApiController
{
//动作名称与HttpVerb相关
公共IEnumerable Get()
{
//返回db.NQSales.AsEnumerable();
返回db.NQSales
.可计算的()
.Select(nqlist=>newnqsaledto(nqlist));
}
}

默认情况下,API的路由是控制器的名称(NQSaleController)与路径相关,操作的名称(Get)与HttpVerb相关。

@Url在视图中,并且似乎生成正确。这是我在firebug中看到的:loadNqsales:function(){var self=this;$.getJSON('/API/NQSale',function(nqsales){self.nqsales.removeAll();$.each(nqsales,函数(索引,项){self.nqsales.push(新的nqsale(项));});}
//The controller name relates to the route
    public class NQSaleController : ApiController
{
// The action name relates to the HttpVerb
    public IEnumerable<NQSaleDto> Get()
    {
        //return db.NQSales.AsEnumerable();
        return db.NQSales
            .AsEnumerable()
            .Select(nqlist => new NQSaleDto(nqlist));

    }
}