簡體   English   中英

無法在asp.net core 2.0中發布原始類型

[英]Cannot post primitive types in asp.net core 2.0

我將非常簡單的json數據發布到.net Core 2.0 API。

為什么我有這樣的方法:

public async Task<IActionResult> GetNewToken([FromBody]string id)

然后id為null,但如果我將其封裝在模型中:

public class RandomViewModel
{
    public string id { get; set; }
}

public async Task<IActionResult> GetNewToken([FromBody]RandomViewModel model)

然后我的id正確填充?

實際上,您可以從請求正文中發布基本類型,但不應使用鍵/值,例如:

public async Task<IActionResult> LockUserByDate(Guid appUserId, [FromBody] string lockoutEnd)

考慮一下這個動作,當我在Postman中測試它時,如果我將它用於身體:

{
 "lockoutEnd": "2018-03-15 16:30:35.4766052"
}

然后它不會綁定但如果我只使用正文中的值,模型綁定器綁定值:

"2018-06-15 16:30:35.4766052"

在此輸入圖像描述

如果您的路由內容類型是application/json則不能直接從您的身體獲取原始類型([FromBody] string id) ,因為mvc等待模型將json主體綁定到模型而不是基本類型。

有一些選項可以從請求體中獲取原始類型

  1. 將內容類型更改為純文本/文本。

  2. 使用StreamReader獲取原始令牌字符串。

  3. 使用MVC InputFormatter

StreamReader示例:

[HttpPost]
public async Task<IActionResult> GetNewToken()
{
    using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
    {  
        var token = await reader.ReadToEndAsync(); // returns raw data which is sent in body
    }
    // your code here
}

InputFormatter示例: https//weblog.west-wind.com/posts/2017/Sep/14/Accepting-Raw-Request-Body-Content-in-ASPNET-Core-API-Controllers

暫無
暫無

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

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