Javascript Vue获取发布数据到控制器asp.net mvc
我使用的是Vue.js,我试图发出post请求并将数据{name:'TestName'}发送到控制器,但当我点击控制器时,取而代之的是name等于“TestName”,它为null 这是我的取回:post请求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:
`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});
}