【问题标题】:Aurelia Fetch Client - Unsupported Media Type - .NET Core WebAPIAurelia Fetch Client - 不支持的媒体类型 - .NET Core WebAPI
【发布时间】: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


【解决方案1】:

..这实际上是一个 CORS 问题。

我在 Startup.cs 中添加了 cors 设置以允许所有来源:

// This method gets called by the runtime. Use this method to add services to the container
public void ConfigureServices(IServiceCollection services)
{
    //CORS---------
    services.AddCors(options =>
    {
        options.AddPolicy("CorsPolicy",
            builder => builder.AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials());
    });

    // Add framework services.
    services.AddApplicationInsightsTelemetry(Configuration);

    services.AddMvc();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    //CORS---------
    app.UseCors("CorsPolicy");

    loggerFactory.AddConsole();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseMvc();

    app.UseDefaultFiles();

    app.UseStaticFiles();

    // app.UseStaticFiles(new StaticFileOptions()
    // {
    //     FileProvider = new PhysicalFileProvider(
    //     Path.Combine(Directory.GetCurrentDirectory(), "src")),
    //     RequestPath = new PathString("/src")
    // });
}

一切正常……

我的 Aurelia 应用程序托管在 port:9000 上,我的 .NET 应用程序托管在 port:90001 上。这个想法是在应用程序发布后从我的 .NET 应用程序提供静态页面,但现在由于 Aurelia 提供的 BrowserSync,我使用 port:9000 开发,(发布时 CORS 不会成为问题,但现在在本地使用 port:9000 时)。

是否可以在本地使用 port:9000 而不启用 CORS?

编辑:

CORS 仅在 localhost 上启用:

app.UseCors(builder =>
{
    builder.WithOrigins("http://localhost:9000")
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials();
});

【讨论】:

【解决方案2】:

您的标题设置不正确。

应该是

{
    "content-type": "application/json; charset=utf-8" 
}

代替

{
    "content-type", "application/json; charset=utf-8"
}

【讨论】:

  • 嗨,当我编辑我的问题时,实际上是一个错字。没有解决我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 2017-08-19
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多