Angular / NET Core Web API не получает удар при запуске с помощью команды «dotnet run» - PullRequest
0 голосов
/ 25 ноября 2018

Угловой новичок здесь.У меня есть приложение Angular 7.0 на базе ASP.NET Core 2.1.Мои веб-интерфейсы не попадают (всегда получая 404), если я запускаю свое приложение из командной строки, используя dotnet run, но оно срабатывает правильно, когда оно запускается непосредственно из VS 2017 IISExpress (нажатием клавиши F5).Поскольку приложение работает нормально во время запуска F5, я предполагаю, что мои Startup.cs настройки верны, но я все же копирую часть маршрута здесь

    app.UseMvc(
        routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "api/{controller}/{action}/{id?}");
        });

Я буду рад предоставить более подробную информацию, если они вам понадобятся.

Обновление 1 : я видел эту запись, и это не применимо в моем случае.

Обновление 2 : После дальнейшего изучения я обнаружил, что после выполнения dotnet run открываются три порта

  1. Не SSL-порт для ASP.NET (в моем случае 5000)

  2. SSL-порт для ASP.NET (в моем случае 5001)

  3. Не SSL-порт для Angular CLI (в моем случае 5002 - я специально попросил 5002 вpackage.json)

Если я выполняю вызов Web API для 5000 или 5001 (оба открыты ASP.NET), это работает (в то время как мое приложение Angular работает в 5002!),Итак, вопрос в том, как я могу использовать один и тот же порт для обоих? .. или это вообще возможно?

Обновление 3 : Program.cs

public class Program
{
    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
    }

    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
}

1 Ответ

0 голосов
/ 27 ноября 2018

Я действительно нашел причину этой проблемы , но забыл обновить здесь.Мои извинения.

Angular CLI всегда запускается на отдельном порту.Предположим, ваш ASP.NET прослушивает порт 5000, а Angular CLI - 4200. Теперь, если вы пытаетесь вызвать Web API из Angular, вы сталкиваетесь с проблемой CORS .

Как я решил свою проблему

  • Включите CORS в ASP.NET Core, следуя этим инструкциям.
  • Из Angular, если вы звоните api/controller/action/id, он будет префикс маршрута с http://localhost:4200/ для вас, и этот порт не имеет ASP.NET.Поэтому я перехватил вызовы и условно перенаправил вызовы на порт 5000 на основе environment.production (определено в \environments\environment.ts)

Надеюсь, это поможет!

...