对 WebAPI2 服务的 POST 请求正文中的空字符串参数
null string parameter in body of POST request to WebAPI2 service
我在 WebAPI2 控制器中定义了如下操作:
[HttpPost]
[Route("DataImport/Product/")]
public DataImportJournalEntry ImportData([FromBody] string base64)
{
return _dataImportService.Import(Convert.FromBase64String(base64));
}
我正在使用 RestSharp 构建一个请求,如下所示:
var base64 = {4Kb xml file loaded and encoded to base64}
var client = new RestClient(Config.BaseAddress);
var request = new RestRequest("DataImport/Product/", Method.POST);
request.AddParameter("base64", base64, ParameterType.GetOrPost);
request.AddHeader("accepts", "application/json");
var response = client.Execute<DataImportJournalEntry>(request);
调用动作时路由正确,但服务器端base64参数为空?
找到了..当使用 FromBody
属性时,正文中只能有一个参数,WebAPI 正在寻找它作为 ={value} 而不是您期望的 {key}={value} .所以我只是在测试中将参数名称作为空字符串传递:
...
var request = new RestRequest("DataImport/Product/", Method.POST);
request.AddParameter("", base64);
...
此处有更多详细信息:http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/
我在 WebAPI2 控制器中定义了如下操作:
[HttpPost]
[Route("DataImport/Product/")]
public DataImportJournalEntry ImportData([FromBody] string base64)
{
return _dataImportService.Import(Convert.FromBase64String(base64));
}
我正在使用 RestSharp 构建一个请求,如下所示:
var base64 = {4Kb xml file loaded and encoded to base64}
var client = new RestClient(Config.BaseAddress);
var request = new RestRequest("DataImport/Product/", Method.POST);
request.AddParameter("base64", base64, ParameterType.GetOrPost);
request.AddHeader("accepts", "application/json");
var response = client.Execute<DataImportJournalEntry>(request);
调用动作时路由正确,但服务器端base64参数为空?
找到了..当使用 FromBody
属性时,正文中只能有一个参数,WebAPI 正在寻找它作为 ={value} 而不是您期望的 {key}={value} .所以我只是在测试中将参数名称作为空字符串传递:
...
var request = new RestRequest("DataImport/Product/", Method.POST);
request.AddParameter("", base64);
...
此处有更多详细信息:http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/