Javascript Vue获取发布数据到控制器asp.net mvc

Javascript Vue获取发布数据到控制器asp.net mvc,javascript,c#,.net,asp.net-mvc,vue.js,Javascript,C#,.net,Asp.net Mvc,Vue.js,我使用的是Vue.js,我试图发出post请求并将数据{name:'TestName'}发送到控制器,但当我点击控制器时,取而代之的是name等于“TestName”,它为null 这是我的取回:post请求 `sendName() { let url = 'https://localhost:44362/Home/ReceiveName' fetch(url, { method: 'POST', body:

我使用的是Vue.js,我试图发出post请求并将数据{name:'TestName'}发送到控制器,但当我点击控制器时,取而代之的是name等于“TestName”,它为null

这是我的取回:post请求

   `sendName() {
        let url = 'https://localhost:44362/Home/ReceiveName'
        fetch(url, {
            method: 'POST',
            body: JSON.stringify({ name: 'TestName' })
        }).then(function (response) {
            response
        }).catch(err => {
            err
        });
    }`
这是我在HomeController中的操作方法ReceiveName

 `[HttpPost]
    public string ReceiveName(string name)
    {
        *some code*
    }`
此处的名称必须为“TestName”,但为空

我尝试了这个问题的答案,在ReceiveName方法中设置
[FromBody]
,就像这个
公共字符串ReceiveName([FromBody]string name)
,但它对我不起作用。然后我尝试添加标题以获取正文

`headers: {
  'Content-Type': 'application/json'
},`
但当我这样做的时候,我会在浏览器中看到那个错误

加载失败:飞行前的响应没有HTTP ok状态

我想这是因为CORS的规则

我在上运行我的后端,在上运行我的前端,所以我必须像这样在web.config中编辑我的CORS规则

 `<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
    </customHeaders>
  </httpProtocol>`
`
`
我的问题是- 如何从Fetch:post接收数据到我的操作方法

是否需要生成查询字符串


但是我不想将字符串“TestName”作为
FormData
发送,我知道如果这样发送,我将在我的操作方法中接收它,但是这是发送字符串的好方法吗?

我遇到了类似的问题,并找到了解决问题的方法。我认为您可能需要使用
name
属性定义一个模型类,然后将[FromBody]添加到动作参数中

创建一个模型类

public class SomeModel
{
    public string name { get; set; }
}
然后使用该模型作为您的参数类型

[HttpPost]
public string ReceiveName([FromBody]SomeModel model)
{
    // model.name should contain the value.
}

我不喜欢这个解决方案,但这是我通过研究所能找到的最好的解决方案。希望它能帮助你

不幸的是.NET MVC没有包含[FromBody]属性(它仅在Web API或.NET Core中可用)。要访问文章正文中的信息,可以使用的属性

下面是一个示例(此代码用于反序列化请求体中的json对象)

[HttpPost]
public ActionResult ReceiveName()
{
System.IO.Stream request=request.InputStream;
request.Seek(0,SeekOrigin.Begin);
string bodyData=新的StreamReader(请求).ReadToEnd();
var data=JsonConvert.DeserializeObject(bodyData);
//做点什么
返回Json(新的{success=true});
}
异步函数postData(){ var data=“abc”; //默认选项标记为* const response=等待获取(“https://localhost:44334/api/Blog/", { 方法:'POST'、/*GET、POST、PUT、DELETE等。 标题:{ “内容类型”:“应用程序/json” //“内容类型”:“应用程序/x-www-form-urlencoded”, }, 重定向:“follow',//手动,*follow,错误 推荐人:'无推荐人',//无推荐人,*客户 body:JSON.stringify(data)//body数据类型必须与“Content-type”头匹配 });
}花了很多时间试图解决这个问题。我没有意识到我必须为它创建一个模型类。谢谢
[HttpPost]
public ActionResult ReceiveName()
{
    System.IO.Stream request = Request.InputStream;
    request.Seek(0, SeekOrigin.Begin);
    string bodyData = new StreamReader(request).ReadToEnd();
    var data = JsonConvert.DeserializeObject<SomeType>(bodyData);

    //do something
    return Json(new { success = true});
}