2014-02-13 3 views
2

Я пытаюсь написать веб-приложение с помощью ASP.NET webAPI и нокаутом и использовать IIS. Здесь я пытаюсь инициировать модель представления на странице администратора (http://localhost/Attendance/Home/Admin). API для извлечения всех пользователей находится на пути http://localhost/Attendance/user. Этот URL-адрес возвращает пользователей при доступе к браузеру.jquery getjson() ASP.Net WebAPI вызывает неправильный URL

Однако, когда я к нему доступ снизу яваскрипта

function adminuservm() { 
    //Properties 
    self = this; 
    self.users = ko.observableArray(); 
    self.user = ko.observable(); 
    self.userscount = ko.computed(function() { 
     if (self.users == null) 
      return 0; 
     else 
      return self.users.length;  
    }, this); 
    //Methods 
    //Get all users 
    self.getAllUsers = function() { 
     $.getJSON("api/user", function (data) { 
     }) 
     .done(function (data) { //success 
      if(data != null) 
      self.users = $.map(data, function (u) { return new user(u) }); 
     }) 
     .fail(function (data) { //error 
      alert("error"); 
     }); 
    }; 

    //call getAllUsers to populate all users 
    self.getAllUsers(); 
} 

Метод getjson не формирует правильный URL, когда я даю realtive путь к веб-ресурсу апи, таким образом, я получаю сообщение об ошибке 404. URL-адрес, который он вызывает, - http://localhost/Attendance/Home/api/user. Затем я попробовал поставить этот код на http://localhost/Attendance/Home/Index, и он работал там.

Я не хочу использовать hardcoded URL в javascript. есть ли выход?

Заранее спасибо.

+0

Вы сказали, что URL-адрес API был «http: // localhost/Attendance/user», так что ваш URL-адрес getJSON должен быть, вероятно, '/ Attendance/user'. Попробуйте это и сообщите нам об итогах. –

+0

Вы используете MVC или WebApi? Ваши URL-адреса относятся к MVC, но ваш код относится к WebAPI. Поэтому я смущен – Dalorzo

+0

@rober: О, извините, его ошибка там. Мой URL-адрес API: http: // localhost/Attendance/api/user – Mahesh

ответ

1

Вы должны изменить URI для /Attendance/api/user, как показано ниже:

self.getAllUsers = function() { 
    $.getJSON("/Attendance/api/user") 
     .done(function (data) { //success 
       if (data != null) 
       self.users = $.map(data, function (u) { return new user()}); 
      }) 
     .fail(function (data) { //error 
       alert("error"); 
      }); 
}; 

Также убедитесь, что у вас есть маршрут, как показано ниже в вашем WebApiConfig классе.

config.Routes.MapHttpRoute(
     name: "", 
     routeTemplate: "Attendance/api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 
Смежные вопросы