Я новичок в ядре 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/(?))
Ваш код должен быть изменен для решения двух проблем.
Проблема 1: Маршрутизация
Как сказал Рани Рэдклифф, URL-адрес в $http.post
должен быть изменен на '/Home/PostData';
в противном случае будет принят код статуса 404. Маршрут по умолчанию для метода " fooMethod
" в контроллере " fooController
" - это " /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 включает свойство boolean success
. В соответствии с принципами RESTful API лучше нам коды статуса HTTP. В ASP.NET Core вы можете использовать специальные вспомогательные функции Controller-Base-Class, например, вместо возврата JsonResult вы можете использовать
return Ok();
return Ok(someObject); // someObject will be converted to JSON
или же
return Unauthorized();
Выведите слово "Контроллер". Попробуйте изменить свой код на:
$http.post('/Home/PostData/', {
'User': user,
'Pass': pass
})
.success(function (data) {
$scope.something = data;
console.log(data);
}).error(function (response) {
alert("Fail");
});
api/<controller>/<action>
? Если это так, URL должен бытьapi/Home/PostData/
.