繁体   English   中英

使用angularjs将数据发布到asp.net核心控制器

[英]Posting Data to asp.net core controller using angularjs

我是Asp.net核心的新手。 我试图使连接数据库的简单登录页面。 但是由于某种原因,我无法将用户名和密码发布到控制器。

控制器/ HomeController.cs

namespace WebApplication12.controllers
 {
public class HomeController : Controller
{
    public ActionResult Index()
    {
        MysqlConnector test = new MysqlConnector();
        return View(test);
    }




    public string test_name { get; set; }
    public string test_role { get; set; }

    private MySqlConnection connectio;

    [HttpPost]
    public JsonResult PostData(string User, string Pass)
    {
        connect(User,Pass);
        MySqlCommand query = new MySqlCommand();
        query.Connection = connectio;
        query.CommandText = string.Format("Select * from users");

        MySqlDataReader reader = query.ExecuteReader();

        reader.Read();
        try
        {
            test_name = reader["user"].ToString(); //reader.getString(1);
            test_role = reader["role"].ToString();
            reader.Close();
            return Json(new {success=true , user=test_name});

        }
        catch (Exception err)
        {
            test_name = err.ToString();
            test_role = err.ToString();
            reader.Close();
            return Json(new { success = false });
        }



    }


    private void connect(string user,string pass)
    {


        string ConnectionString =  string.Format("server=localhost ;database=xdata; uid={0} ; pwd={1}",user,pass);

        connectio = new MySqlConnection(ConnectionString);
        connectio.Open();



    }
}

的login.html

 <p><input ng-model="username" value="Username"/></p>
 <p><input ng-model="password" value="Password"/></p>
<p><button type="button" ng-click="submit(username,password)">Click to Submit</button></p>

角度代码

 $http.post('/HomeController/PostData/', {
        'User': user,
        'Pass': pass

    })

    .success(function (data) {
        $scope.something = data;
        console.log(data);

    }).error(function (response) {

        alert("Fail");

    });

当我单击按钮时,在控制台上,它将显示整个html。 发布时显然存在错误。 提前致谢。 (“ HomeController / PostData /(?)处出错)

删除“控制器”一词。 尝试将代码更改为:

 $http.post('/Home/PostData/', {
    'User': user,
    'Pass': pass

})

.success(function (data) {
    $scope.something = data;
    console.log(data);

}).error(function (response) {

    alert("Fail");

});

您的代码必须更改为解决两个问题。

问题1:路由

正如Rani Radcliff指出的那样,必须将$http.post的URL更改为'/Home/PostData'; 否则将收到404状态代码。 控制器“ fooController ”中方法“ fooMethod ”的默认路由为“ /foo/fooMethod ”。

问题2:从身体读取模型

介绍一个模型类,并使用[FromBody]注释操作

public class LoginModel {
    public string User {get; set;}
    public string Pass {get; set;}
}

public class HomeController : Controller
{
    ...

    [HttpPost]
    public JsonResult PostData([FromBody] LoginModel model)
    {
       ...
    }
}

问题3:首选HTTP状态代码来表示成功或失败

在您的示例中,JSON响应包含一个布尔success属性。 根据RESTful API的原理,对我们来说HTTP状态代码更好。 在ASP.NET Core中,您可以使用Controller-Base-Class的特定帮助器函数,例如,可以使用return JsonResult代替

return Ok(); 
return Ok(someObject); // someObject will be converted to JSON

要么

return Unauthorized();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM