Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Mvc核心Post字符串值_C#_Asp.net Core_Asp.net Web Api_Asp.net Core Mvc - Fatal编程技术网

C# Mvc核心Post字符串值

C# Mvc核心Post字符串值,c#,asp.net-core,asp.net-web-api,asp.net-core-mvc,C#,Asp.net Core,Asp.net Web Api,Asp.net Core Mvc,问题:我们可以不使用模型,仅基于IActionResult方法的参数名进行绑定吗。从下面我将发布一个字符串到端点,但是它被包装在一个属性为reviewNotes的对象中。我现在有一个工作要做,如下所述 我已经这样设置了终点 [HttpPost("updateassetnotes/{id}")] public IActionResult UpdateAssetNotes(int id, [FromBody]string reviewNotes) { _dat

问题:我们可以不使用模型,仅基于
IActionResult
方法的参数名进行绑定吗。从下面我将发布一个
字符串
到端点,但是它被包装在一个属性为
reviewNotes
的对象中。我现在有一个工作要做,如下所述

我已经这样设置了终点

    [HttpPost("updateassetnotes/{id}")]
    public IActionResult UpdateAssetNotes(int id, [FromBody]string reviewNotes)
    {
        _dataMapper.UpdateAssetNotes(id, reviewNotes);
        return ApiSuccess("Updated Review Notes");
    }
而客户端就是这样发布的

    var url = "/api/cataloguing/updateassetnotes/" + id;
    var data = { reviewNotes: self.assetReviewNotes() };

    $.ajax({
        type: 'POST',
        url: url,
        data: JSON.stringify(data),
        contentType: 'application/json'
    }).done(function (resp) {

    }).fail(function (resp) {

    }).always(function () {

    });
但是,如果我将数据更改为:

    var data =  self.assetReviewNotes();
然后实际上填充了review notes字符串。如前所述,这是我目前正在使用的解决方案。如前所述,我可以创建一个简单的模型,如下所示,并在端点使用它来绑定字符串。我只是想知道是否有一种方法可以直接绑定到基元类型

public class SimpleModel {
    public string ReivewNotes {get;set;}
}

显然,正如你在问题中已经指出的那样

var data = { reviewNotes: "foo" };
不同于

var data = "foo";
因为后者是
字符串
,前者是具有
字符串
属性的
对象


代码最直接的解决方案是这一行

data: JSON.stringify(data),
您可以通过执行以下操作将
字符串
对象
中“展开”来解决此问题

data: JSON.stringify(data.reviewNotes),

另一种方法是避免使用
JSON.stringify
,而只处理原始数据的映射。但是,如果您这样做,您可能需要注意映射,并且
[FromBody]
装饰器可能需要一些调整,当然还有
内容类型

,正如您在问题中已经指出的那样

var data = { reviewNotes: "foo" };
不同于

var data = "foo";
因为后者是
字符串
,前者是具有
字符串
属性的
对象


代码最直接的解决方案是这一行

data: JSON.stringify(data),
您可以通过执行以下操作将
字符串
对象
中“展开”来解决此问题

data: JSON.stringify(data.reviewNotes),

另一种方法是避免使用
JSON.stringify
,而只处理原始数据的映射。但是,如果您这样做,您可能需要注意映射,并且
[FromBody]
装饰器可能需要一些调整,以及
内容类型

4个月前,我用ASP.NET核心创建了演示,用ajax创建了post数据。Mby it can help you@J.Doe我刚刚尝试实现一个类似于您的解决方案,但它不起作用。我猜是因为我想把路由参数和post数据结合起来。你为什么想要
JSON.stringify
没有名字的数据对象?当stringify请求看起来像
{“reviewNotes”:“sss”}
而没有
reviewNotes=sss
@J.Doe时,ajax代码实际上是一个更广泛的库的一部分,因此它是通用的,以处理一系列模型,这就是stringify存在的原因。我尝试了几种方法,没有使用stringify,只使用数据对象。即使终点有多个变量。两个有效的方法是将单个字符串作为数据对象。或者为问题中提到的终点创建一个简单的模型。我只是好奇这些参数是否可以根据它们的名称进行绑定。4个月前,我用ASP.NET内核创建了演示,用ajax发布了数据。Mby it can help you@J.Doe我刚刚尝试实现一个类似于您的解决方案,但它不起作用。我猜是因为我想把路由参数和post数据结合起来。你为什么想要
JSON.stringify
没有名字的数据对象?当stringify请求看起来像
{“reviewNotes”:“sss”}
而没有
reviewNotes=sss
@J.Doe时,ajax代码实际上是一个更广泛的库的一部分,因此它是通用的,以处理一系列模型,这就是stringify存在的原因。我尝试了几种方法,没有使用stringify,只使用数据对象。即使终点有多个变量。两个有效的方法是将单个字符串作为数据对象。或者为问题中提到的终点创建一个简单的模型。我只是想知道这些参数是否可以根据它们的名字进行绑定。