0

我正在尝试使用 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 控制器。如果我从 ~/Account/Login 视图中使用 ajax 调用 api 控制器,则 ajax 调用将映射到 MVC 控制器 ~/Account/Login 而不是 Api Controller api/Login。但是,如果我从 web.config 中删除“身份验证”标签并将 Account/Login 作为默认视图加载,则 ajax 调用会按预期映射到 api 控制器。

我尝试在 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 }
            );
4

1 回答 1

0

我自己想出来了。我使用的身份验证限制了调用控制器方法,而不是用作 loginUrl 的方法。因此,对除 Account\login 之外的控制器的所有引用都映射到 Account\login 本身。

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

于 2013-09-13T02:08:49.753 回答