[英]C# WebClient using UploadString to call HttpPost method from an ApiController also in C#. 415 or 400 error
我希望在C#中也可以在C#中調用ApiController,但是當使用WebClient實例中的UploadString方法上傳Json時,我得到錯誤415或400。
服務器代碼是自動生成的調用TestController。 該文件正是Visual Studio 2019生成它的方式。
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
// GET: api/Test
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// POST: api/Test
[HttpPost]
public void Post([FromBody] string value)
{
}
...
}
客戶端代碼如下所示:
WebClient client = new WebClient();
client.UploadString("https://localhost:44345/api/Test", "ABC"); // Edit: "ABC" is not a valid JSON
我收到System.Net.WebException:'遠程服務器返回錯誤:(415)不支持的媒體類型。'
所以在谷歌搜索之后,大多數建議是ContentType沒有指定,如果我添加
client.Headers[HttpRequestHeader.ContentType] = "application/json";
我得到System.Net.WebException:'遠程服務器返回錯誤:(400)錯誤請求。
任何線索?
好像問題與POST
/ PUT
/ PATCH
......如果我做GET
,它正在工作並返回示例數據["value1","value2"]
編輯:我不是堅持使用WebClient.UploadString方法,但我想要一個不涉及25行自定義代碼的解決方案......我的意思是我無法相信它在jQuery中可以做到這一點很難單行。
我收到System.Net.WebException:'遠程服務器返回錯誤:(415)不支持的媒體類型。'
使用[FromBody]
,將使用Content-Type
標頭來確定如何解析請求正文。 如果未指定Content-Type
,則模型綁定過程不知道如何使用正文,因此返回415。
我得到System.Net.WebException:'遠程服務器返回錯誤:(400)錯誤請求。
通過將Content-Type
標頭設置為application/json
,您將指示模型綁定過程將數據視為JSON,但ABC
本身不是有效的JSON。 如果您只想發送一個JSON編碼的字符串,您也可以將值包裝在引號中,如下所示:
client.UploadString("https://localhost:44345/api/Test", "\"ABC\"");
"ABC"
是一個有效的JSON字符串,將由您的ASP.NET Core API接受。
簡單解決方案
調用API時在標頭中指定Content-type
,
WebClient client = new WebClient();
client.Headers.Add("Content-Type", "text/json");
client.UploadString("https://localhost:44345/api/Test", "\"ABC\"");
編輯:
不要使用[From_Body]
屬性,因為它具有可怕的錯誤處理功能,請參閱此處 。
如果請求正文有任何無效輸入(語法錯誤,不支持的輸入),那么它將針對錯誤請求和不支持的內容拋出400
和415
。 出於同樣的原因,它可能需要null作為來自請求體的輸入,它不理解格式。
因此,刪除該屬性並嘗試以純格式上傳字符串,因為它只接受String,並且您不需要在發出請求時指定Content-Type屬性。
[HttpPost]
public void Post(string value)
{
}
這就像你在原帖中所說的一樣。
WebClient client = new WebClient();
client.UploadString("https://localhost:44345/api/Test", "ABC");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.