Angular7-.NET Core v2抛出http 415(不受支持的媒体类型)

时间:2019-03-02 10:18:04

标签: c# angular .net-core

我正在尝试将用户填写的表单作为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})
  }
}

1 个答案:

答案 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#中,stringString的别名,因此它们是等效的,尽管仍然建议使用别名小写版本)。

发生了什么

没有看到实际数据,只能是推测。我无法确定这是否是问题的根源,但是在字符串上执行JSON.stringify会导致您将双引号引起来的字符串作为HTTP POST的正文发送,这也许就是您的C#后端的原因对它不满意。