对AJC调用MVC API

时间:2013-07-19 18:33:41

标签: asp.net-mvc json jquery

我正在尝试使用ajax进行API调用:

svc.authenticateAdmin = function (id, code) {
    $.ajax({
        url: 'api/event/authenticate',
        data: { 'id': id, 'code': code },
        datatype: 'json',
        contentType: 'application/json',
        type: 'GET',
        success: function (data) {
            App.eventBus.publish('authenticationComplete', data);
        }
    });
};

API控制器中的方法:

[ActionName("All")]
public bool Authenticate(int id, string code)
{
    var repo = new MongoRepository<Event>(_connectionString);
    var entry = repo.FirstOrDefault(e => e.Id == id);
    return entry.AdminPassword == code;
}

但我收到404错误:urlstuff / api / event / authenticate?id = 123&amp; code = abc 404(Not Found)

我已经从许多已知的工作调用中复制了实现(我没有写过)。看起来像:

svc.getEventFromCode = function (code) {
    $.ajax({
        url: '/api/event/',
        data: { 'code': code },
        dataType: 'json',
        type: 'GET',
        success: function (data) {
            App.eventBus.publish('loadedEvent', data);
            App.eventBus.publish('errorEventCodeExists');
        },
        error: function () {
            App.eventBus.publish('eventNotFound', code);
        }
    });
};

svc.getEventPage = function (pageNumber) {
    $.ajax({
        url: '/api/event/page/',
        data: { 'pageNumber': pageNumber },
        dataType: "json",
        contentType: "application/json",
        type: 'GET',
        success: function (data) {
            App.eventBus.publish('loadedNextEventsPage', data);
        }
    });
};

但两者都不必将2个参数传递给API。我猜它是非常小的东西:/

2 个答案:

答案 0 :(得分:1)

您的操作名称称为“身份验证”,但您已包含以下重命名操作的内容:

[ActionName("All")]

这会产生网址

/api/event/all

答案 1 :(得分:0)

问题在于您的url

显然,ajax在网址开头解释/root

当应用程序部署在serverserver上时,其URL类似于http://localhost:8080/AppName/

api/event/page/,ajax将网址解析为http://localhost:8080/AppName/api/event/page/或相对于当前目录的网址。

但是,对于/api/event/page/,网址已解析为http://localhost:8080/api/event/page/

希望它有所帮助。