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

标签 c# angular .net-core

我正在尝试将用户填写的表单作为 json 发送到我的 api。但因为它不是 Json(我认为),所以它在浏览器的控制台中返回此错误:

415 (Unsupported Media Type)

我已经在后端启用了 CORS,并且我还收到了 json [FromBody] 并且我非常确定问题出在 Angular 代码上。

这是我的表格:

<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})
  }
}

最佳答案

一个简单的字符串已经有效的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# 后端对此不满意。

关于c# - Angular7 - .NET Core v2 抛出 http 415(不支持的媒体类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54957425/

相关文章:

c# - WPF:ContentPresenter 上的 TextTrimming

c# - 使用 TypeMock 模拟 Autofac 的 "Resolve"扩展方法

angular - 如何在 Angular 2.0 中使用 iron-list

entity-framework - EntityFramework 正在缓存旧的过时数据,我不知道如何阻止它

.net-core - 如何更新 dotnet cli 使用的 nuget.exe 版本

c# - 是否可以在HttpClient中访问解压前的压缩数据?

c# - 散列和 GetString/GetBytes 问题

c# - 解析查询WhereKey :MatchesQuery equivalent for . NET

angular - 使用angular-cli时如何添加第三方库?

javascript - Angular 将数据传递给子组件