jokul
jokul

Reputation: 1339

Making AJAX call to MVC API

I am trying to make an API call with ajax:

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

The method in the API Controller:

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

But I am getting a 404 error: urlstuff/api/event/authenticate?id=123&code=abc 404 (Not Found)

I have copied the implementation from a number of known working calls (that I did not write). That look like:

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

and

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

But neither has to pass in 2 parameters to the API. I'm guessing it's something really minor :/

Upvotes: 0

Views: 242

Answers (2)

Chilpol
Chilpol

Reputation: 160

The problem lies in your url.

Apparently, ajax interpret / at the start of the url to be root

When the application is deployed on serverserver, its URL is something like http://localhost:8080/AppName/

with api/event/page/, ajax resolve the URL to http://localhost:8080/AppName/api/event/page/ or an url relative to your current directory.

However, with /api/event/page/, the URL is resolved to http://localhost:8080/api/event/page/

Hope it helped.

Upvotes: 0

Matt Houser
Matt Houser

Reputation: 36123

Your action name is called "Authenticate", but you have included the following which will rename the action:

[ActionName("All")]

This makes the URL

/api/event/all

Upvotes: 1

Related Questions