Я создал проект с. NET Core для моего API и Angular для моего веб-интерфейса. Я создал этот проект с использованием Visual Studio, отметив эту опцию: Во время разработки все работает нормально, но когда я на своей машине развертывания, работающей 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)