当前位置: 首页 > 知识库问答 >
问题:

来自Axios 405或415的Vue.js和.NET WEBAPI2发布错误

施晗昱
2023-03-14

我在发帖到我的WebAPI时遇到了麻烦。

[RoutePrefix("api/Test")]
   public class TestController : ApiController
   {
       // GET: api/Test
       [Route]
       public IEnumerable<string> Get()
       {
           return new string[] { "value1", "value2" };
       }

       [Route]
       public void Post([FromBody]string value)
       {
           Debugger.Break();
       }
   PostTest(){
       alert("Post Test Starting");
       var data = new FormData();
       data.set('value','test');
       //var data = {'value': 'test'};
       this.CallAxios('post', 'http://localhost:10000/api/Test/', data, axiosHeaders);
   },
   CallAxios(callMethod, callURL, callData, callHeaders)
   {
     axios({
       method: callMethod,
       url: callURL,
       data: callData,
       headers: callHeaders
     }).then((response) => {
       alert(response.data)
     })
   }

因此,即使我为内容类型指定了application/json,它仍然被理解为multipart/form-data

如果将vue.js代码切换为使用“var data={'value':'test'}”,并从.NET Post参数中删除[FromBody]属性,则会收到以下405“method Not alloved”错误:

{“消息”:“请求的资源不支持http方法'post'。”}

  1. 使用FormData vue调用,如何通过multipart/form-data问题得到415错误?
  2. 使用JSon字符串如何在API调用中支持POST谓词?

共有1个答案

公西光华
2023-03-14

有两种方法可以实现这一点(这两种方法都不使用FormData)

1)发送为content-type:application/x-www-form-urlencoded。要做到这一点,您需要使用像qs这样的库对参数进行URL编码。但是,请注意这个特殊的WebAPI警告(空密钥名)

import qs from 'qs';
let myValue = 'FontSpace'
let options = {
    url: '/api/fonts'
    , method: 'post'
    , data: qs.stringify({ '': myValue })
}
let response = await this.$http(options)

如果在devtools中检查请求,您将看到参数被编码为

let myValue = 'FontSpace'
let options = {
    headers: { 'Content-Type': 'application/json' }
    , url: '/api/fonts'
    , method: 'post'
    , data: JSON.stringify(myValue)
}
let response = await axios(options)

这篇文档很有帮助

当参数具有[FromBody]时,Web API使用Content-Type头来选择格式化程序。在本例中,内容类型是“application/JSON”,请求主体是一个原始JSON字符串(而不是JSON对象)。

 类似资料:
  • 当我将我的follower对象发布到我的rest调用时,我得到了一个415错误,但我不明白为什么?我没有添加dao和其他值的私有字段,因为它是一个更大的文件,我在这篇文章中只放了调用、客户端和http处理程序的代码。 错误消息: 正在向URL发送“POST”请求:http://localhost:8080/KwetterBart-web/api/user/startfollow响应代码:415Ja

  • 问题内容: 这是我认为的Java纯粹主义者之一。最近,我遇到了一种将字符串值自定义解析为布尔值的方法的问题。一个足够简单的任务,但是由于某种原因,以下方法在空情况下抛出NullPointerException…… 该方法的返回类型为布尔值,那么为什么或如何引发NullPointerException?从调试开始,似乎在嵌套的嵌入式条件语句评估为null并向外部嵌入式条件语句返回null的时候抛出了

  • 我已经设置了一个AWS Lambda函数,并试图从前endpoint击它。它在浏览器中工作得很好,并返回我期望的响应。当我尝试从点击它时,我得到一个403。我试图按照这里和这里概述的步骤(没有像一些评论者提到的那样吹走我的整个API),但没有效果。我在所有变化后重新部署。启用CORS后,我不再获得403,而是获得415。不确定下一步该做什么,因为Cloudwatch日志中没有任何内容。 更多细节:

  • 我正在使用Node js验证到Azure AD以创建Data Lake存储帐户,它会登录,但对于帐户创建,它会给出错误:代码:'Invalid验证令牌租户',消息:'访问令牌来自错误的发行者\'https://sts.windows.n et\'。它必须匹配与此子描述关联的租户\'https://sts.windows.net/\'。

  • 问题内容: 我想使用排球库发布布尔值,双精度数据。我不知道如何使用它。还有其他任何过程吗?谢谢。 这是我的方法。 问题答案:

  • 我正在尝试运行这里提供的kotlin代码的测试:https://github.com/ligi/ipfs-api-kotlingradlew 我收到了下面列出的错误。有人能告诉我这个错误是什么意思吗?