Почтальон получает ошибку 404 для ASP.NET Core Web API - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь изучить ядро ​​asp.net, поэтому в соответствии с официальным сайтом я установил его sdk и создал простой веб-API с помощью этой команды:

dotnet new webapi -o TodoApi 

Мой идеал vscode. Это мой контроллер класса:

namespace TodoApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        [HttpGet("{id}")]
        public ActionResult<string> Get(int id)
        {
            return "value";
        }

        [HttpGet("api/cities")]
        public JsonResult GetCities(){
            return new JsonResult(new List<object>(){
                new {id=1, name = "new york city"},
                new {id = 2 , name = "gorgan"}
            });
        }

    }
}

Я добавил GetCities метод в этом примере. В почтальоне, когда я использую

https://localhost:5001/api/values

Я получил результат:

[
    "value1",
    "value2"
]

но когда я вызываю свой метод, который я уже добавил к контроллеру, в постамне

https://localhost:5001/api/cities

Я получил 404 Not Found, и мне нужно использовать этот URL https://localhost:5001/api/values/api/cities, чтобы получить правильный ответ?

В чем проблема? и как я могу это исправить?

Это настройка:

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": false, 
    "iisExpress": {
      "applicationUrl": "http://localhost:34842",
      "sslPort": 44370
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": false,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "TodoApi": {
      "commandName": "Project",
      "launchBrowser": false,
      "launchUrl": "api/values",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

и информация о сети:

groot@groot-Product:~$ dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   2.1.700
 Commit:    c2ef055a0f

Runtime Environment:
 OS Name:     ubuntu
 OS Version:  18.04
 OS Platform: Linux
 RID:         ubuntu.18.04-x64
 Base Path:   /usr/share/dotnet/sdk/2.1.700/

Host (useful for support):
  Version: 2.1.11
  Commit:  d6a5616240

.NET Core SDKs installed:
  2.1.700 [/usr/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.11 [/usr/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.11 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.11 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download
groot@groot-Product:~$

1 Ответ

1 голос
/ 21 июня 2019

Ваше имя контроллера - ValuesController.ASP.Net использует имя контроллера для пути.Поэтому в этом случае вам следует вызвать

api/values/GetCities 

и удалить атрибут

[HttpGet("api/cities")]

из вашего метода.

Если вы хотите, чтобы путь был

GET api/cities

Создайте новый контроллер и скопируйте код в этот контроллер, переименовав ваш метод в Get(), затем сядьте и позвольте коду выполнитьпойдут за тобой.

...