【发布时间】:2017-07-08 02:57:38
【问题描述】:
当我尝试使用 Aurelia Fetch Client 将两个参数作为 JSON 发布到 .NET Core WebAPI 时,我得到:415 (Unsupported Media Type)
应用程序控制器
[HttpPost("getapplications")]
public ApplicationViewModel GetApplications([FromBody] ApplicationSearchModel model)
{
var applications = _applicationService.GetApplications().ToList();
return new ApplicationViewModel()
{
Applications = applications
};
}
public class ApplicationSearchModel
{
public DateTime? From { get; set; }
public DateTime? To { get; set; }
}
application.js
import { inject } from 'aurelia-framework';
import {HttpClient, json} from 'aurelia-fetch-client';
@inject(HttpClient)
export class Application {
constructor(httpClient) {
this.applications = [];
this.httpClient = httpClient;
}
getApplications() {
this.httpClient.fetch("http://localhost:9001/api/application/getapplications", {
method: "POST",
body: JSON.stringify({
From: '2017-02-18',
To: '2017-02-18'
}),
headers: {
"content-type": "application/json; charset=utf-8" //Tried without headers aswell
}
});
}
activate(params) {
this.getApplications();
}
}
如果我删除 [FromBody] 它会发布,但我的 ApplicationSearchModel 中的属性为空。
当我使用以下设置通过 Postman 发布时:
网址:
http://localhost:9001/api/application/getapplications
正文:
{
"from": "2017-02-18",
"to": "2017-02-18"
}
标题:
Content-Type: application/json
一切正常,我在ApplicationSearchModel 中的属性不为空。
当我查看 Aurelia Fetch Client 生成的请求时,似乎缺少 Content-Type 标头..
编辑
请求标头:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:9001
Origin:http://localhost:9000
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
【问题讨论】:
-
是否启用了 CORS?
-
不是,但不是跨域请求
-
415 (Unsupported Media Type)的原因正是你所说的:好像缺少 Content-Type 标头。 -
我已经尝试了所有可能的方法来添加内容类型,但它总是忽略我所做的一切
标签: .net asp.net-core .net-core aurelia aurelia-fetch-client