Могу ли я использовать данные запроса Post (я имею в виду тело json) не в формате верблюжьего слота для Web Api? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть следующий контроллер:

[ApiController]
public class CheckController : ControllerBase
{
    [HttpPost]
    [Route("/check")]
    public ActionResult<IEnumerable<string>> Index([FromBody] CheckRequest request)
    {
        return Ok();
    }
}

Как видите, у меня есть CheckRequest модель просмотра для запросов на привязку:

public class CheckRequest
{
    [Required(ErrorMessage = "List of AppIds can not be empty")]
    public List<string> AppIds { get; set; }
}

Чтобы сделать запрос правильно, мне нужноотправить что-то вроде:

enter image description here

И это работает. Я поймал свою точку останова.

Но давайте представим ситуацию, когда мои разработчики внешнего интерфейса (или мобильные разработчики) говорят мне: «Нет, мы не хотим AppIds, нам нужны« app_ids »! Можете ли вы переименовать его? ?»

Теперь это не работает:

enter image description here

Как я могу указать в CheckRequest, что мне нужно сопоставить, напримерОт app_ids до AppIds параметр?

Ответы [ 3 ]

1 голос
/ 30 октября 2019

Вам просто нужно использовать JsonProperty("app_ids")] в этом свойстве для сопоставления app_ids

public class CheckRequest
{
    [JsonProperty("app_ids")]
    [Required(ErrorMessage = "List of AppIds can not be empty")]
    public List<string> AppIds { get; set; }
}

Post json body:

{
    "app_ids":["test1","test2"]
}

Если вы используете asp.net core 3.0,вам необходимо добавить поддержку Json.Net :

1.Добавить пакет nuget Microsoft.AspNetCore.Mvc.NewtonsoftJson

2.В ConfigureServices использовать

services.AddControllers().AddNewtonsoftJson();
1 голос
/ 30 октября 2019

Кроме того, если другой разработчик мобильных устройств хочет использовать «ApplicationIds», вы также можете сделать это. Теперь вы можете поддерживать три имени.

public class YourObject
{
    [JsonProperty("app_ids")]
    public string AppIds{ get; set; }

    [JsonProperty("ApplicationIds")]
    private string AppIds2 { set { AppIds = value; } }
}
0 голосов
/ 30 октября 2019

Зарегистрируйтесь под кодом в конфигурации WEB API. Это решит проблему.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
        var json = config.Formatters.JsonFormatter;
        var serializerSettings = json.SerializerSettings;
        var contractResolver = (Newtonsoft.Json.Serialization.DefaultContractResolver)serializerSettings.ContractResolver;
        serializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
        serializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat;
        contractResolver.IgnoreSerializableInterface = true;
        contractResolver.IgnoreSerializableAttribute = true;
    }
}
...