#asp.net #angular #asp.net-mvc #asp.net-core #asp.net-web-api
#asp.net #angular #asp.net-mvc #asp.net-ядро #asp.net-web-api
Вопрос:
Я хочу отправить данные (PostDateTime, Name, Division) из Angular в контроллер в качестве параметра, но я не смог передать.
Typescript:
onSubmit(){
this.salesService.postGetData(this.form.value).subscribe(
(res: any) => {
console.log(this.form.value); //I got data here, working fine upto here but cannot post to controller
this.recData = res;
},
err => {
if (err.status == 400)
this.toastr.error('Error !!', 'Authentication failed.');
else
this.toastr.error('Network error', 'Authentication failed.');
//this.loadSpinner.hide();
}
);
Service.ts:
postGetData(data) {
return this.http.post(this.BaseURL 'Report/FilterCollectionReport', data);
}
Контроллер:
[Route("FilterCollectionReport")]
[HttpPost]
public IActionResult CollectionReportFilter(string PostDateTime, string Name, string Division) // tried by adding [FormBody] also but does not work
{
string iConn = Configuration["ConnectionStrings:IConnection"];
using (SqlConnection con = new SqlConnection(iConn))
{
List<Object> objList = new List<Object>();
string query = "KK_SP_VIEWSALESENTRY"; // It is SQL procedure takes some parameter/s
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = Name;
cmd.Parameters.Add("@PostDateTime", SqlDbType.VarChar).Value = PostDateTime;
cmd.Parameters.Add("@Division", SqlDbType.VarChar).Value = Division;
con.Open();
cmd.Connection = con;
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
objList.Add(new
{
Id = reader[0].ToString(),
Name = reader[2].ToString(),
Division = reader[3].ToString(), //...etc
});
}
}
con.Close();
}
return Ok(objList);
}
}
Он отлично работает в Postman, когда я отправляю данные из параметров, но не работает из body -> raw -> JSON
Класса нет, я работаю с существующей базой данных..
Есть ли что-то, чего мне не хватает, что мне нужно добавить в мой код?
Ответ №1:
Похоже, что вы отправляете данные объекта в теле запроса, поэтому вам нужно создать для него модель и использовать ее в качестве параметра метода контроллера FromBodyAttribute
.
public sealed class DataModel {
public string PostDateTime {get; set;}
public string Name {get; set;}
public string Division {get; set;}
}
И используйте это так:
[Route("FilterCollectionReport")]
[HttpPost]
public IActionResult CollectionReportFilter([FormBody] DataModel model)
{
var name = model.Name;
var division = model.Division;
var postDateTime = model.PostDateTime
// Your logic
}