AJAX和Web Api发布方法-如何工作?

2021/01/17 14:21 · jquery ·  · 0评论

我正在尝试使用AJAX / Jquery和c#写入数据库。每当我将参数传递给C#代码时,它就会显示为null。我正在使用Visual Studio创建控制器类时生成的默认模板。任何帮助,将不胜感激!

注意:这是我要致电的一项休息服务。(一个普通的ASP网站...不是MVC。此外,GET Rest API可以完美地工作。)

jQuery / AJAX:

        var dataJSON = { "name": "test" }

        $('#testPostMethod').bind("click", GeneralPost);
        function GeneralPost() {
            $.ajax({
                type: 'POST',
                url: '../api/NewRecipe',
                data:JSON.stringify(dataJSON),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json'
            });
        }

C#

    //If I remove the [FromBody] Tag then when I click the button this method is never called.
    public void Post([FromBody]string name)

    {

    }

编辑:

我已经稍微调整了代码,但是仍然遇到相同的问题。回顾一下,它正在加载POST方法,但它传递的是null。

C#

 public class RecipeInformation
    {
        public string name { get; set; }

    }

        public void Post(RecipeInformation information)

        {

        }

AJAX:

    var dataJSON = { information: { name: "test" } };

    $('#testPostMethod').bind("click", GeneralPost);
    console.log(dataJSON);
    function GeneralPost() {
        $.ajax({
            type: 'POST',
            url: '../api/NewRecipe',
            data: dataJSON,
            contentType: 'application/json; charset=utf-8',
        });
    }

对于简单类型,在服务器端:

public void Post([FromBody]string name)
{
}

在客户端,您只需定义是否要以json格式发送:

    var dataJSON = "test";

    $('#testPostMethod').bind("click", GeneralPost);
    function GeneralPost() {
        $.ajax({
            type: 'POST',
            url: '/api/NewRecipe',
            data: JSON.stringify(dataJSON),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json'
        });
    }

如果要使其以复杂类型工作,则应从服务器端定义:

public class RecipeInformation
{
    public string name { get; set; }
}

public class ValuesController : ApiController
{
    public void Post(RecipeInformation information)
    {
    }
}

从客户端:

    var dataJSON = { name: "test" };

    $('#testPostMethod').bind("click", GeneralPost);
    function GeneralPost() {
        $.ajax({
            type: 'POST',
            url: '/api/NewRecipe',
            data: JSON.stringify(dataJSON),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json'
        });
    }

您可以尝试做这样的事情,并使用jquery param方法

    var postData = {
        name : 'name'
    }

    $('#testPostMethod').bind("click", GeneralPost);
    function GeneralPost() {
        $.ajax({
            type: 'POST',
            url: '../api/NewRecipe',
            data: $.param(postData,true),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json'
        });
    }

我想您正在使用ASP.NET WebAPI,它绑定了URL中的所有简单类型(int,bool,字符串等)和正文中的所有复杂类型。当您用FromBody属性标记名称时,它将从请求正文而不是url映射中将其绑定。

您可以在此处阅读有关ASP.NET WebAPI路由和参数绑定的更多信息:

您缺少的是数据协定属性,如果您制作一个类,例如:

[DataContract]
public class RecipeInformation
{
    [DataMember]
    public string name { get; set; }
}

这些属性位于System.Runtime.Serialization中,并且Json解析器(Json.NET)使用它们来(帮助)反序列化模型。

API控制器中的绑定有些奇怪。我相信:

public void Post([FromBody]RecipeInformation information)

var dataJSON = { name: "test" };

应该可以正常工作,并且只要将其作为表单数据传递就一定可以正常工作。

我在
提到的
Microsoft Docs Use JS代码的帮助下发现了问题

$.post('api/updates/simple', { "": $('#status1').val() });

我错过了加入空属性名,所以有什么OP需要做的是{"":data:JSON.stringify(dataJSON)},不是data:JSON.stringify(dataJSON),

$(“#updateuser”)。click(function(){

        var id = $("#id").val();
        var dataJSON = $("#username").val();

        alert("" + dataJSON);

        $.ajax({


            url: 'http://localhost:44700/api/Home/' + id,
            type: 'PUT',
            data: JSON.stringify(dataJSON),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',

            success: function (data, textStatus, xhr) {
                $.each(data, function (key, val) {
                    $("<li>" + val + "</li>").appendTo($("#names"));
                })
            },
            error: function (xhr, textStatus, errorThrown) {
                alert('Error in Operation');
            }

            })

    })
本文地址:http://jquery.askforanswer.com/ajaxheweb-apifabufangfa-ruhegongzuo.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!