2013-09-12 6 views
0

Я пытаюсь вызвать метод контроллера Web Api из представления с помощью Ajax. Мой Аякса вызов с точки зрения заключается в следующем,MVC 4: Вызов контроллера Api из вида

function loginuser() { 
    var name = $("#txt_usrname").val(); 
    var pass = $("#txt_password").val(); 
    var source = { 
     'username': name, 
     'password': pass, 
    } 
    $.ajax({ 
     type: "POST", 
     dataType: "json", 
     data: source, 
     url: 'api/Login', // url of Api controller not mvc 
     success: function (data) { 
       if(data.redirect) 
       alert("Redirect true !"); 

     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      console.log(errorThrown); 
     } 
    }); 

} 

Я могу назвать контроллер апи из любой точки зрения, за исключением следующего сценария.

После установки URL входа в WebConfig следующим

<authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" path="/" defaultUrl="~/Home/Index" name=".ASPXFORMSAUTH" timeout="2880"/> 
    </authentication> 

Файл ~/Account/Login указывает на контроллер MVC. Если я вызываю контроллер api с помощью ajax из ~/Account/Login view, вызов ajax сопоставляется с контроллером MVC ~/Account/Login вместо Api Controller api/Login. Но если я удалю тэг аутентификации из web.config и загрузим Account/Login как представление по умолчанию, вызов ajax сопоставляется с контроллером api, как и ожидалось.

Я попытался изменить URL-адрес в вызове ajax, но независимо от того, что является URL-адресом, вызов ajax всегда отображается на контроллер MVC вместо имени контроллера, которое я указываю в качестве URL-адреса.

Это происходит только для внутреннего тега аутентификации Loginurl. Если я удалю тег аутентификации и использую вызов ajax в любом другом представлении, он отлично работает.

Кто-нибудь сталкивался с этим проблемы ?, извините, если я пропускаю очевидное, но я застрял на этом в течение нескольких часов ...

мне нужно все действия, которые будут обрабатываться контроллерами Api, а не MVC, потому что проект должен использоваться с Phonegap.

Любая помощь, советы, даже если не ответ будет оценено ...

Спасибо заранее.

Вот мой маршрут таблица

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

и webApiConfig

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
+0

Вы можете оставлять свои сообщения? – SOfanatic

ответ

0

Разобрался сам .. Аутентификация я Ограничивает вызова, отличных от той, которая используется в качестве loginUrl методов контроллера. Поэтому все ссылки на контроллеры, отличные от учетной записи \ login, сопоставляются с самой учетной записью \ login.

Использовать атрибут [authorize] на контроллерах для преодоления этой проблемы.

Смежные вопросы