亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法在 asp.net core mvc 中調用具有 [FromBody] 屬性的類參數

無法在 asp.net core mvc 中調用具有 [FromBody] 屬性的類參數

C#
牧羊人nacy 2022-01-16 14:47:46
我正在 asp.net core mvc 中開發一個用于在線預訂的 API。但是,當我嘗試從 API 發布方法添加預訂時,我收到錯誤消息:WebException:遠程服務器返回錯誤:(415)不支持的媒體類型。System.Net.HttpWebRequest.GetResponse()有2個項目:項目一我的 API 操作方法中有一個 [FromBody] 屬性的 post 方法。我必須調用此方法并傳遞預訂對象。方法定義是:[HttpPost]public Reservation Post([FromBody] Reservation res) =>repository.AddReservation(new Reservation{    Name = res.Name,    FromLocation = res.FromLocation,    ToLocation = res.ToLocation});項目 2 在項目 2 中,我想調用這個 API 方法。為此,我在視圖中創建了一個表單來填寫名稱,從位置到位置值。然后在控制器上我必須調用 API 方法(如上所示)??刂破鞔a為:[HttpPost]public IActionResult AddReservation(Reservation reservation){    HttpWebRequest apiRequest = WebRequest.Create("http://localhost:8888/api/Reservation") as HttpWebRequest;        apiRequest.Method = "Post";        string parameters = "Name=" + reservation.Name + "Image=" + reservation.Image + "&FromLocation=" + reservation.FromLocation + "&ToLocation=" + reservation.ToLocation;        byte[] byteArray = Encoding.UTF8.GetBytes(parameters);        apiRequest.ContentType = "application/x-www-form-urlencoded";        apiRequest.ContentLength = byteArray.Length;        // Add the post data to the web request        Stream postStream = apiRequest.GetRequestStream();        postStream.Write(byteArray, 0, byteArray.Length);        postStream.Close();        string apiResponse = "";        using (HttpWebResponse response = apiRequest.GetResponse() as HttpWebResponse)        {            StreamReader reader = new StreamReader(response.GetResponseStream());            apiResponse = reader.ReadToEnd();        }        return RedirectToAction("Index");}我收到錯誤 - WebException:遠程服務器返回錯誤:(415)不支持的媒體類型。System.Net.HttpWebRequest.GetResponse()但是當我運行 powershell 命令時,它可以工作:PM> Invoke-RestMethod http://localhost:8888/api/Reservation -Method POST -Body (@{Name="Anne"; ToLocation="Meeting Room 4"} | ConvertTo-Json) -ContentType "application/json"請幫忙?
查看完整描述

2 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

在前者中,您將請求正文編碼為x-www-form-urlencoded,而在后者中,您將請求正文編碼為application/json. 相同的動作不能同時響應兩者。由于參數裝飾有[FromBody],application/json是您應該使用的參數,這就是 powershell 命令起作用的原因。


如果您確實需要 x-www-form-urlencoded,請刪除該[FromBody]屬性。如果您確實需要同時支持兩者,則需要兩條單獨的路線:


private Reservation PostCore(Reservation res)

{

    // do something

}


[HttpPost("json")]

public Reservation PostJson([FromBody] Reservation res) => PostCore(res);


[HttpPost("")]

public Reservation PostForm(Reservation res) => PostCore(res);


查看完整回答
反對 回復 2022-01-16
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

您的 POST 代碼中有兩個問題,首先我在評論中提到,克里斯在他的回答中提到。


第二個是您如何生成請求的正文,使用如下內容:


var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://url");

httpWebRequest.ContentType = "application/json";

httpWebRequest.Method = "POST";


using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))

{

    string json = "{\"user\":\"test\"," +

                  "\"password\":\"bla\"}";


    streamWriter.Write(json);

    streamWriter.Flush();

    streamWriter.Close();

}


var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))

{

    var result = streamReader.ReadToEnd();

}

取自此anwser 的代碼


您還可以使用Json.Net序列化您的預訂(如果所有字段名稱和類型匹配)


查看完整回答
反對 回復 2022-01-16
  • 2 回答
  • 0 關注
  • 556 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號