我正在尝试将用户填写的表单作为json发送到我的api。但是因为不是Json(我认为),它会在我的浏览器的控制台中返回此错误:
415(不受支持的媒体类型)
我已经在后端启用了CORS,而且我收到的是json [FromBody]
,而且我很确定问题出在角度代码上。
这是我的表格:
<form [formGroup]="messageForm" (ngSubmit)="onSubmit(messageForm)" class="form-inline mt-2 mt-md-0">
<h5 *ngIf="success"></h5>
<input type="text" formControlName="Words" class="form-control mr-sm-2" placeholder="test" aria-label="Words">
<div *ngIf="submitted && messageForm.controls.Words.errors" class="error">
<div *ngIf="messageForm.controls.Words.errors.required">test</div>
</div>
<button type="submit" value="Send message" class="btn btn-outline-success my-2 my-sm-0">test</button>
</form>
这是我的服务等级:
import { Component, OnInit } from '@angular/core';
import { DataService } from '../data.service';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
messageForm: FormGroup;
submitted = false;
success = false;
logsList;
constructor(private data: DataService , private formBuilder: FormBuilder ) { }
ngOnInit() {
this.messageForm = this.formBuilder.group({
Words: ['', Validators.required]
});
}
onSubmit(messageForm) {
this.submitted = true;
this.data.search(this.messageForm.value)
.subscribe(dat=> {console.log(dat)})
if (this.messageForm.invalid) {
return;
}
this.success = true;
}
这是我的数据服务:
import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class DataService {
logsList;
baseUrl = 'http://localhost:5000/Logs'
constructor(private http: HttpClient) { }
search(words: String) {
var body = JSON.stringify(words);
const headers = new HttpHeaders();
headers.set('Content-Type', 'application/json; charset=utf-8');
console.log(body)
console.log(headers)
return this.http.post(this.baseUrl + '/Search', body , {headers: headers})
}
}
答案 0 :(得分:2)
一个简单的string
已经 有效JSON。由于您使用的是String
对象,因此可以简单地将主体设置为实际的字符串值:
let body = words.toString(); // or simply : let body = words; it should work as well IMHO
作为旁注,我建议仅使用string
作为words
的类型,而不要使用String
。
后者应该是string
的花式包装(但是在C#中,string
是String
的别名,因此它们是等效的,尽管仍然建议使用别名小写版本)。
发生了什么?
没有看到实际数据,只能是推测。我无法确定这是否是问题的根源,但是在字符串上执行JSON.stringify
会导致您将双引号引起来的字符串作为HTTP POST的正文发送,这也许就是您的C#后端的原因对它不满意。