android改造消费asp.net web api [FromBody]始终为null

时间:2015-05-29 05:41:25

标签: c# android asp.net json retrofit

我正在使用c#,MVC编写的web api,它看起来像:

public IEnumerable<Day> Post([FromBody] string postObject)

使用fiddler或海报我可以发布到该REST服务,因为我的身体在发送JSON之前有一个=,类似

={"BillTypeId":"4","RestId":"1"}

使用改造来进行此调用我无法发送该初始值=并且我的请求看起来像

{"BillTypeId":"4","RestId":"1"}

这使得rest服务始终接收null参数。 你知道在我的json之前发送它的方法吗?因为我这样称呼休息

void postToGetDayList(@Body ResquestListenerBillType request, Callback<List<Day>> callback);

谢谢!!!

2 个答案:

答案 0 :(得分:1)

如果您还没有解决问题,我想您可以参考以下代码:

的WebAPI:

public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }        

    // POST api/values
    public string Post([FromBody]string value)
    {
        return value;
    }        
}

改进WebAPIService:

public interface WebAPIService {
    @GET("/api/values")
    List<String> listValues();

    @POST("/api/values")
    String postValues(@Body String value);
}

致电webAPIService.postValues("BNK");

您将找到如下图所示的结果。希望这可以帮助! Debug info

答案 1 :(得分:0)

在发送类转换为字符串之前,添加一个“拳头字符串并在最后一个字符串上添加一个”,然后发送正文 我的客户端API是:

   [Put("/WebPage/{key}/")]
        Task<string> PutWebPage([AliasAs("key")]string id, [Body]string value);

示例代码为:

   WebPageModel webPageModelSave = new WebPageModel();
                webPageModelSave = ObjectCopier.CloneClass(Public.CashEntity.webPageModel);
                webPageModelSave.Address = uxLabel_AddressTitle.Text;

                string codeingData = JsonConvert.SerializeObject(webPageModelSave);
               codeingData = ArmanSerialize.CryptoString.Encrypt(codeingData, "5552552");
                string resutlt = await Public.Helper.ApiServer.PutWebPage("123", "\""+codeingData+"\"");

并在服务器上删除“拳头和最后一个字符串,如下所示:

// PUT api/<controller>/5
        [HttpPut("{id}/")]
        public string Put(string id, [FromBody]string value)
        {
            string removeCotation = value.Remove(value.Length - 1, 1).Remove(0, 1);

            string valueItem = ArmanSerialize.CryptoString.Decrypt(value, "5552552");
            string baseUrl = Request.Host.Host;
            baseUrl = baseUrl.ToLower().Replace("http://", "").Replace("https://", "");
            var serverID = 123;
            if (id.Replace("\"", "") == serverID.Replace("\"","") && !string.IsNullOrEmpty(valueItem))
            {
                WebPageModel webPageModel = new WebPageModel();
                webPageModel = JsonConvert.DeserializeObject<WebPageModel>(valueItem);
                EntityFrameworkCore.LogicLayer logicLayer = new EntityFrameworkCore.LogicLayer();
                logicLayer.UpdateWebPageModel(webPageModel);
                return JsonConvert.SerializeObject("OK");
            }
            else
            {
                //error
                return JsonConvert.SerializeObject("Error");
            }
        }

我以xamarin形式对其进行了测试,并且asp.net core 3可以正常工作。