我正在开发一个大型MVC应用程序。它在我们的组织中作为门户运行了几年。但是,我们现在有一些其他应用程序将与此门户进行交互。
例如,我们希望我们的应用程序对来自不同应用程序的用户进行身份验证(两个应用程序中的用户名和密码都相同)。
我更改了我的LoginController以包含以下代码:
[HttpGet]
public JsonResult AjaxLogin(string username, string password)
{
LoginModel loginModel = new LoginModel();
loginModel.UserName = username;
loginModel.Password = password;
if (Login(loginModel) == true)
{
return Json( new { Result = loginModel}, JsonRequestBehavior.AllowGet);
}
ViewBag.ErrorMessage = "Invalid login. Please try again.";
return Json(new { Result = "ERROR" }, JsonRequestBehavior.AllowGet);
}
LoginModel有两个属性,UserName和PassWord。 为了测试登录,我创建了一个示例html文件并向其添加了以下脚本。
<script>
var urlservice = "http://localhost:4941/";
$.ajax({
url: urlservice + 'Login/AjaxLogin',
type: 'GET',
data: {username : "progr1", password : "Xmb@092"},
contentType: 'application/json',
success: function (data) {
console.log(data);
}
});
</script>
当我运行此html时,我收到以下错误:
NetworkError: 404 Not Found - http://localhost:4941/Login/AjaxLogin?username=progr1&password=Xmb@092
然而,当我在浏览器中输入相同内容并按回车键时,我得到以下结果:
{ “结果”:{ “用户名”: “progr1”, “密码”: “XMB @ 092”}}
我的问题是,我是否有正确的方法来处理共享数据的两个门户之间的交互?
我该如何解决这个问题。
答案 0 :(得分:0)
您的网址错误使用此代码生成您的操作网址
<script>
$.ajax({
url: '@Url.Action("AjaxLogin","Login")',
type: 'GET',
data: {username : "progr1", password : "Xmb@092"},
contentType: 'application/json',
success: function (data) {
console.log(data);
}
});
</script>
答案 1 :(得分:0)
使用@Url.Content("~")
获取您的域名
那么你的javascript代码就像::
var urlservice = @Url.Content("~");
$.ajax({
url: urlservice + 'Login/AjaxLogin',
type: 'GET',
data: {username : "progr1", password : "Xmb@092"},
contentType: 'application/json',
success: function (data) {
console.log(data);
}
});
如果您将使用@Url.Action("AjaxLogin","Login")
然后进行本地执行,这将有效但在您将在服务器上发布项目时会出现问题。
答案 2 :(得分:0)
由于安全原因,Ajax方法不允许跨域通信。
正如您期望的json数据那样 jsonp (带有填充的JavaScript Object Notation)是一种从外部域获取JSON数据的方法
对于从外部域获取数据的其他方法(Web代理和IFrame),jsonp是一种更好,更清晰的替代方法。
请参阅this文章,这将对您有所帮助