我正在尝试使用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 }
);
答案 0 :(得分:0)
弄清楚自己.. 我使用的身份验证限制调用控制器方法而不是用作loginUrl的方法。因此,对Account \ login以外的控制器的所有引用都映射到Account \ login本身。
在控制器上使用[authorize]属性来克服此问题。