簡體   English   中英

如何在 C# .net core 3.1 中的 MVC 控制器中傳遞 json 變量

[英]How do you pass a json variable in an MVC controller in C# .net core 3.1

已經在網上學習了許多教程,但仍然得到相同的結果。 考慮到我想要的本質上就是將一個變量發送到控制器,Microsoft 的文檔是如此深入。

我的客戶端代碼如下所示:

var obj = { send: 'test' };

    $.ajax({
        url: '/Countries/GetVotes',
        type: 'POST',
        contentType: "application/json",
        data: JSON.stringify(obj),
        success: function (data) {
            if (data === null) {
                // TODO
            } else {
                console.log(data);
            }
        },
        error: function (error) {
            console.log(error);
        }
    }); 

然后控制器看起來像這樣:

[HttpPost]
    public async Task<JsonResult> GetVotes(string send)
    {
        try
        {
            var votes = ctx.Candidates.Where(x => x.Country == send)
                .OrderByDescending(x => x.Votes)
                .ToList();
            
            return Json(votes);

        }
        catch (Exception ex)
        {
            logger.Error(ex);
        }

        return Json("foo");
    }

所有標准並用於在 .NET 框架 4.7.2 中工作,任何做過任何 MVC 的人都會非常熟悉這種方法。

我已決定嘗試使用 .net core 3.1。 我遇到了所有正確的斷點,我遇到的問題是名為“send”的字符串作為空值發送到我的控制器。

有誰知道最簡單的方法來讓這個工作?

你傳入的是一個 JSON 對象

{ send: "test" }

您在控制器的請求正文中期望的只是一個字符串。 您可以嘗試創建一個代表您期望的數據結構的請求對象:

public class Request {
    public string send { get; set; }
}

然后你可以更新你的控制器方法

public async Task<JsonResult> GetVotes([FromBody]Request request) 

並通過 request.send 進一步訪問 send 屬性。

當您已經發送字符串時,您不需要字符串化。 並刪除內容類型。 默認就可以了。

所以試試這個

  $.ajax({
        url: '/Countries/GetVotes',
        type: 'POST',
     
        data: obj,
        success: function (data) {
            if (data === null) {
                // TODO
            } else {
                console.log(data);
            }
        },
        error: function (error) {
            console.log(error);
        }
    }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM