美好的一天,
我一直在Angular 7和Asp.net核心Web API中进行一些自学。
现在我想从asp.net核心读取结果并在Angular 7中显示。
这是来自Asp.net Core的代码
[HttpPost("DataCorrection")]
public IActionResult DataCorrection([FromBody] DataCorrectionDto data)
{
try
{
var request = Request;
var values = _dataCorrection.GetDateRange(data.StartDate, data.EndDate);
return Ok(values);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
throw ex;
}
}
方法GetDateRange
返回一个DataCorrection Model
的列表
这是我的角度代码
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl, } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-data-correction',
templateUrl: './data-correction.component.html',
styleUrls: ['./data-correction.component.css']
})
export class DataCorrectionComponent implements OnInit {
list: any[];
selectedDate = new Date();
form = new FormGroup({
StartDate: new FormControl(),
EndDate: new FormControl()
});
constructor(private http: HttpClient) { }
ngOnInit() {
}
onSubmit() {
this.http.post('http://localhost:5000/api/DataCorrection/DataCorrection', this.form.value)
.toPromise()
.then(res => {
this.list = res as any[];
console.log('Called');
});
}
}
这是HTML代码
<form [formGroup]="form" (ngSubmit)="onSubmit()">
<!-- <input formControlName="first" [(ngModel)]="value"> -->
<mat-form-field>
<input matInput formControlName="StartDate" [matDatepicker]="StartDate" placeholder="Start date">
<mat-datepicker-toggle matSuffix [for]="StartDate"></mat-datepicker-toggle>
<mat-datepicker #StartDate ></mat-datepicker>
</mat-form-field>
<mat-form-field>
<input matInput formControlName="EndDate" [matDatepicker]="EndDate" placeholder="End date">
<mat-datepicker-toggle matSuffix [for]="EndDate"></mat-datepicker-toggle>
<mat-datepicker #EndDate ></mat-datepicker>
</mat-form-field>
<div class="form-group">
<button class="btn btn-primary">Submit</button>
</div>
</form>
<tr *ngFor="let pd of list">
<td >{{pd.ActualLogin}}</td>
<td >{{pd.ActualLogout}}</td>
<td >{{pd.ShiftLogin}}</td>
<td>
<i class="far fa-trash-alt fa-lg text-danger" ></i>
</td>
</tr>
现在如何正确读取它,以便可以将其加载到表中。
使用上面的代码。它甚至不填充表格。但它称为console.log
我尝试搜索解决方案已有几个小时了。但是我迷路了。我不了解这些教程,因此无法正常工作。
这是我的网络api的响应。我是从Chrome浏览器的response
标签中读取的
{"emp_Id":963,"actualLogin":"05:00:11","actualLogout":"05:01:00","shiftLogin":"05:00:00","shiftLogout":"13:00:00","date":"2019-04-03T00:00:00Z"}
此数据是我要在表中填充的
谢谢。
答案 0 :(得分:2)
我不认为这是问题所在,
模板 pd.ActualLogin
中存在拼写错误,但实际上在JSON响应中,它拼写为 actualLogin
。将模板更改为
<tr *ngFor="let pd of list">
<td >{{pd.actualLogin}}</td>
<td >{{pd.actualLogout}}</td>
<td >{{pd.shiftLogin}}</td>
<td>
<i class="far fa-trash-alt fa-lg text-danger" ></i>
</td>
</tr>
答案 1 :(得分:0)
将结果保存在某些变量中
示例
this.http.post('http://localhost:5000/api/DataCorrection/DataCorrection', this.form.value)
.toPromise()
.then(res => {
result = res;
console.log('Res ' + res);
});
并尝试在用户界面中显示
示例
<div>{{result|json}}</div>
这将以json格式显示结果
注意:使用ngFor可以根据您的输出格式在表格中显示结果
答案 2 :(得分:0)
您正在执行跨域请求,因为您的api和Angular应用正在不同的端口上提供服务。您可以添加cors标头以接受api上的所有域(不建议使用),也可以设置proxy.config.json文件,以便将api调用重定向到与Angular应用相同的端口。
{
"/api/*": {
"target": "http://localhost:5000/api/",
"pathRewrite": {
"^/api": ""
},
"changeOrigin": true,
"secure": false,
"logLevel": "debug"
}
}
在您的Angular中,使用/ api / DataCorrection / DataCorrection代替http://localhost:5000/api/DataCorrection/DataCorrection
然后与
一起使用ng serve --proxy-config proxy.config.json