Ошибка вызова api Angular Spa с. NET Core при развертывании - PullRequest
0 голосов
/ 03 апреля 2020

Я создал проект с. NET Core для моего API и Angular для моего веб-интерфейса. Я создал этот проект с использованием Visual Studio, отметив эту опцию: Screenshot of creation Во время разработки все работает нормально, но когда я на своей машине развертывания, работающей Windows Server 2012 и IIS, мой вызовы API больше не работают.

Вот мой контроллер:

[Route("api/")]
[Authorize]
[ApiController]
public class RequestController : ControllerBase
{
[HttpPost]
[Route("EvalPassword")]
public async Task<DtoResponseEvalPassword> EvalPassword(DtoRequestEvalPassword request)
{
    return new DtoResponseEvalPassword()
    {
        Score = (int)await _passwordService.EvalPassword(request.Password, request.Lang)
    };
}

Вот мой Startup.cs:

using MaSecurite.Services;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.SpaServices.AngularCli;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;

namespace MaSecurite
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {

            services.Add(new ServiceDescriptor(typeof(IPasswordService), new PasswordService()));
            services.Add(new ServiceDescriptor(typeof(IPassphraseService), new PassphraseService()));
            services.AddControllersWithViews();
            // In production, the Angular files will be served from this directory
            services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/dist";
            });
        }


        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");

                app.UseHsts();
            }

            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
            };

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            if (!env.IsDevelopment())
            {
                app.UseSpaStaticFiles();
            }

            app.UseRouting();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

            app.UseSpa(spa =>
            {
                // To learn more about options for serving an Angular SPA from ASP.NET Core,
                // see https://go.microsoft.com/fwlink/?linkid=864501

                spa.Options.SourcePath = "ClientApp";

                if (env.IsDevelopment())
                {
                    spa.UseAngularCliServer(npmScript: "start");
                }
            });
        }
    }
}

Вот пример одного из моих вызовов API ( EvalPassword):

constructor(private http: HttpClient, private translateService: TranslateService, @Inject('BASE_URL') public baseUrl: string) { }

evalPassword(password: string): any {
  const dto = new DtoRequestEvalPassword(password, this.translateService.currentLang);
  return this.http.post(this.baseUrl + 'api/EvalPassword', dto);
}

Что я нахожу странным, так это то, что в dev все работает очень хорошо. В prod «angular» работает хорошо, но каждый вызов API, который я делал, возвращал:

POST https://localhost/api/EvalPassword 500 (Internal Server Error)

1 Ответ

0 голосов
/ 06 апреля 2020

Я решил проблему, включив Windows Auth на моем сервере IIS. Я думал, что это уже было включено. : ') Чтобы увидеть, в чем заключалась моя ошибка, я просто вставил в свой файл Startup.cs:

app.UseDeveloperExceptionPage();

для производственной среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...