ASP.NET Core API返回415不支持的媒体类型错误如何解决
415错误为服务端无法识别请求的媒体类型,你的问题由多处配置错误共同导致,修改方案如下:
前端问题及修复
你的fetch API调用存在3个核心错误:
- fetch没有顶层的
contentType、accepts配置项,请求头需要放到headers字段中声明 - 直接传对象作为
body会默认被转为[object Object]字符串,而非JSON格式,需要先通过JSON.stringify()序列化 - 你已配置了全局CORS允许跨域,不要设置
mode: 'no-cors',该模式下浏览器会自动禁止发送application/json等自定义Content-Type头,且无法读取响应内容
修复后的前端代码:
const googleResponse = (response) => { const options = { method: 'POST', body: JSON.stringify({ TokenId: response.tokenId }), headers: { "Content-Type": "application/json", "Accept": "application/json" }, cache: 'default', } fetch(config.GOOGLE_AUTH_CALLBACK_URL, options) .then(r => r.json()) .then(data => console.log(data)) .catch(e=>console.log(e)) }
后端问题及修复
你的后端代码存在2个模型绑定相关错误:
OauthToken类中的TokenId是公共字段而非公共属性,ASP.NET Core默认仅对公共属性做模型绑定,需要修改为带get/set访问器的属性- 接口参数建议显式添加
[FromBody]特性,明确指定从请求体读取参数,避免路由匹配异常
修改后的后端代码:
public class OauthToken { public string TokenId { get; set; } } [AllowAnonymous] [HttpPost("signin-google")] [Consumes("application/json")] public async Task<IActionResult> GoogleLogin([FromBody] OauthToken userView) { // 原有逻辑 }
修改完成后即可正常调用接口。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

