Пользовательское имя свойства для модели FromUrl

#c# #asp.net #asp.net-web-api

Вопрос:

У меня есть модель, которая используется для привязки строки запроса, которая следует за диалогом имен в c#, но строка запроса находится в другом диалоге имен. Как указать пользовательское имя свойства для свойств модели, которым присвоен vis FromUrl ?

 // Will NOT work
public class FormatDatabaseRequest
{
    [JsonProperty("_type")]
    public string Type { get; set; }

    [JsonProperty(Name = "awef_flag")]
    public string AwefFlag { get; set; }
}

// Controller.cs
[HttpPost]
public async Task<HttpResponseMessage> FormatDatabaseAsync([FromUri] FormatDatabaseRequest request) {}

// Sample URL (QueryString MUST be named _type and awef_flag)
// https://localhost:43521/myControllerName?_type=asdfaamp;awef_flag=asdf
 

Ответ №1:

Если вы хотите получать поля из такого URL-адреса, я рекомендую использовать [FromQuery] атрибут, например:

 public async Task<HttpResponseMessage> Get([FromQuery] FormatDatabaseRequest data)
 

Затем такой URL-адрес

 https://localhost:43521/myControllerName?type=asdfaamp;awefflag=asdf
 

Будет правильно проанализирован ваш объект 🙂

Комментарии:

1. Мне нужен myControllerName?_type=asdfaamp;awef_flag=asdf в качестве моего URL-адреса

2. Кроме того, FromQuery является частью AspNetCore, мне нужно для AspNet

Ответ №2:

json не имеет ничего общего со строкой запроса. Я не понимаю, почему вам не нравятся свойства подчеркивания, но вы можете скрыть их вот так

 public class FormatBaseRequest
{
    public string _Type { get; set; }
    public string Awef_flag{ get; set; }
} 
public class FormatDatabaseRequest:FormatBaseRequest
{
   
    public string Type 
    { 
        get { return _Type; }
       set { _Type=value ; } //or leave just get
    }

   
    public string AwefFlag 
   { 
       get { return Awef_flag; }
       set { Awef_flag=value ; } //or leave just get
    }
}
 

вы можете использовать его для строки запроса и для c#