Asp.net ядро 3.1 Заменить косую черту (/) на вопрос Marq (?) в URL-адресе

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

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

Вопрос:

В Asp.net ядро 3.1 мы хотим настроить маршрутизацию.

У нас есть действие GetDepart

 [HttpGet("GetDepart/{id}")]
public async Task<ActionResult<Depart>> GetDepart(int id)
{
    //Return a Department
}
  

Как настроить маршрутизацию для замены косой черты (/) вопросительным знаком (?)
В URL-адресе,

поэтому вместо того, чтобы http://localhost:44339/Departs/GetDepart/1 , мы хотим иметь http://localhost:44339/Departs/GetDepart ?id=1

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

1. Вы заменяете a / на a ? например, используя string.Replace("/", "?"); , но это не то, что вы здесь ищете. Может быть, это может помочь: c-sharpcorner.com/UploadFile/ca2535/query-string-in-Asp-Net

2. @Jelle эта ссылка не имеет ничего конкретного к этому вопросу.

3. @PanagiotisKanavos Статья разделена на две части, я должен был сразу отправить вторую часть: c-sharpcorner.com/UploadFile/1e050f /…

4. @Jelle первая статья посвящена веб-формам и на самом деле не говорит о строках запроса, за исключением отдельных фрагментов. Большая часть этого просто описывает создание формы WebForms с несколькими полями

5. @Jelle, вопрос о маршрутизации в Asp.net основной веб-api, мне нужно иметь «?» в URL-адресе вместо «/», и для этого требуется настройка в HttpGet verb для действия

Ответ №1:

Вы, вероятно, ищете источники.

Что-то подобное должно привести вас туда, где вы хотите быть…

 [HttpGet("GetDepart")]
public async Task<ActionResult<Depart>> GetDepart([FromQuery] int id)
{
    //Return a Department
}
  

Обратите [FromQuery] внимание на атрибут id параметра.

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

1. Я настраиваю маршрутизацию с помощью атрибута [HttpGet(«GetDepart /{id}»)], но мне нужно поместить URL с косой чертой (/) как я могу заменить [HttpGet («GetDepart/{id}») на получение «?» вместо «/»

Ответ №2:

HttpGetAttribute нужен параметр шаблона, но шаблон не может содержать символ ‘?’, это сделано специально. Поэтому, если вы хотите использовать ?id=1 , вы можете использовать так (но этот способ отличается от маршрута, когда http://localhost:44339/Departs/GetDepart он также может перейти к действию):

 [HttpGet("GetDepart")]

    public async Task<ActionResult<Depart>> GetDepart(int id)
    {
        //Return a Department
    }
  

Вам не нужно добавлять [FromQuery] раньше int id , привязка модели найдет его в строке запроса по умолчанию.Вы можете обратиться к официальному документу привязки модели.

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

1. Согласен, но, на мой взгляд, GetDepart/{id} лучше написать для маршрута

2. Спасибо, это работает, и если параметры — это модель, то я должен использовать HttpGet или я должен изменить его на HttpPost, потому что модель не может быть отправлена в URL.