MVC 4:从View调用Api控制器

时间:2013-09-12 11:38:34

标签: ajax asp.net-mvc-4 controller asp.net-web-api

我正在尝试使用Ajax从视图中调用Web Api控制器方法。 我从视图中调用的ajax如下,

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

}

我可以从任何视图调用api控制器,但以下情况除外。

在webconfig中设置登录URL后,如下所示

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

〜/ Account / Login指向MVC控制器。如果我使用ajax调用api控制器 从〜/ Account / Login视图,ajax调用映射到MVC控制器〜/ Account / Login而不是Api Controller api / Login。但是,如果我从web.config中删除'authentication'标记并将Account / Login加载为默认视图,则ajax调用将按预期映射到api Controller。

我尝试在ajax调用中更改url,但无论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 }
            );

1 个答案:

答案 0 :(得分:0)

弄清楚自己.. 我使用的身份验证限制调用控制器方法而不是用作loginUrl的方法。因此,对Account \ login以外的控制器的所有引用都映射到Account \ login本身。

在控制器上使用[authorize]属性来克服此问题。