通过Ajax的MVC控制器操作

时间:2014-10-14 05:48:33

标签: jquery ajax asp.net-mvc asp.net-mvc-4

我正在开发一个大型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”}}

我的问题是,我是否有正确的方法来处理共享数据的两个门户之间的交互?

我该如何解决这个问题。

3 个答案:

答案 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文章,这将对您有所帮助