Отправка данных в основной контроллер asp.net с помощью angularjs

0

Я новичок в ядре 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/(?))

  • 0
    Если вы не изменили его по умолчанию, разве маршрут обычно не api/<controller>/<action> ? Если это так, URL должен быть api/Home/PostData/ .
  • 0
    мой маршрут похож на этот route.MapRoute ("default", "{* catchall}", new {controller = "Home", action = "Index"});
Теги:
asp.net-core

2 ответа

1
Лучший ответ

Ваш код должен быть изменен для решения двух проблем.

Проблема 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();
  • 0
    Я сделал первое, и это сработало, но для второго, как я должен определить User и Pass в $ http.post? Я имею в виду, когда я публикую пользователя и перейду с angularjs, он автоматически увидит эти параметры в LoginModel. извините за мой английский, если я не смог объяснить это хорошо.
  • 0
    @risefire Вам не нужно изменять сообщение. Базовая структура asp.net сопоставляет имена свойств JSON со свойствами класса C #.
Показать ещё 5 комментариев
3

Выведите слово "Контроллер". Попробуйте изменить свой код на:

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

})

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

}).error(function (response) {

    alert("Fail");

});
  • 0
    пытался, но не получилось: /

Ещё вопросы

Сообщество Overcoder
Наверх
Меню