本文介绍了415(不支持的媒体类型),带有睡觉发布请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
您正在尝试使用JSON正文执行POST请求。在客户端上,您的请求看起来不错。
有趣的是在您接收的Web API中
我有一个Reaction组件,当按下复选框时,它会调用睡觉接口,使用单个参数发出POST请求。
我在webapi中放置了断点,但始终未命中,但组件上仍出现415不支持的媒体类型
react js component (see onchange event) import React, { Component } from 'react'; import { Table, Radio} from 'antd'; import { adalApiFetch } from '../../adalConfig'; import Notification from '../../components/notification'; class ListTenants extends Component { constructor(props) { super(props); this.state = { data: [] }; } fetchData = () => { adalApiFetch(fetch, "/Tenant", {}) .then(response => response.json()) .then(responseJson => { if (!this.isCancelled) { const results= responseJson.map(row => ({ key: row.ClientId, ClientId: row.ClientId, ClientSecret: row.ClientSecret, Id: row.Id, SiteCollectionTestUrl: row.SiteCollectionTestUrl, TenantDomainUrl: row.TenantDomainUrl })) this.setState({ data: results }); } }) .catch(error => { console.error(error); }); }; componentDidMount(){ this.fetchData(); } render() { const columns = [ { title: 'Client Id', dataIndex: 'ClientId', key: 'ClientId' }, { title: 'Site Collection TestUrl', dataIndex: 'SiteCollectionTestUrl', key: 'SiteCollectionTestUrl', }, { title: 'Tenant DomainUrl', dataIndex: 'TenantDomainUrl', key: 'TenantDomainUrl', } ]; // rowSelection object indicates the need for row selection const rowSelection = { onChange: (selectedRowKeys, selectedRows) => { if(selectedRows[0].key != undefined){ console.log(selectedRows[0].key); const options = { method: 'post', body: JSON.stringify({ clientid : selectedRows[0].key.toString() }) , config: { headers: { 'Content-Type': 'application/json' } } }; adalApiFetch(fetch, "/Tenant/SetTenantActive", options) .then(response =>{ if(response.status === 200){ Notification( 'success', 'Tenant set to active', '' ); }else{ throw "error"; } }) .catch(error => { Notification( 'error', 'Tenant not activated', error ); console.error(error); }); } }, getCheckboxProps: record => ({ type: Radio }), }; return ( <Table rowSelection={rowSelection} columns={columns} dataSource={this.state.data} /> ); } } export default ListTenants;和webapi方法
[HttpPost] [Route("api/Tenant/SetTenantActive")] public async Task<IHttpActionResult> SetTenantActive([FromBody]string clientid) { var tenantStore = CosmosStoreFactory.CreateForEntity<Tenant>(); var allTenants = await tenantStore.Query().Where(x => x.TenantDomainUrl != null).ToListAsync(); foreach(Tenant ten in allTenants) { ten.Active = false; await tenantStore.UpdateAsync(ten); } var tenant = await tenantStore.Query().FirstOrDefaultAsync(x => x.clientid == clientid); if (tenant == null) { return NotFound(); } tenant.Active = true; var result = await tenantStore.UpdateAsync(tenant); return Ok(result); } 推荐答案我注意到的几件事。
据我了解,帖子正文是
{ clientid: 'some-client-id' }public async Task<IHttpActionResult> SetTenantActive([FromBody]string clientid)
这可能是罪魁祸首。您的API需要一个字符串作为POST正文,其中它是一个json对象。您是否尝试将类型更改为dynamic或JObject?
所以,基本上,
public async Task<IHttpActionResult> SetTenantActive([FromBody]dynamic clientRequest)或
public async Task<IHttpActionResult> SetTenantActive([FromBody]JObject clientRequest)交替
如果您想继续按原样使用您的API,则只需将您从客户端发出的请求更改为’some-client-id’,而不是{ clientid: 'some-client-id' }
更多推荐
415(不支持的媒体类型),带有睡觉发布请求
发布评论