#c# #angular #iis #asp.net-core
#c# #angular #iis #asp.net-core
Вопрос:
У меня проблема с моим ASP.NET Основной веб-сервис.
Мне нужен был JWT для аутентификации в моем проекте Angular. Вот почему я создал службу, в которой пользователь должен быть проверен, авторизован ли он. Я сделал это с помощью .NET Core, потому что у меня есть сервер IIS.
Когда я запускаю его локально с помощью «dotnet run», я могу выполнять запросы get или put локально. Я протестировал это также в плагине YARC для Google Chrome, отправив POST-запрос с полезной нагрузкой (JSON с двумя парами ключ-значение).
Я загрузил службу на сервер IIS, запустил ее, снова передал URL (на этот раз с доменом сервера, на котором расположен IIS) плагину YARC в моей локальной машине для запроса POST с той же полезной нагрузкой. Это выдает мне ошибку 404-Not Found.
Функциональный локальный URL-адрес:http://localhost:5000/api/auth/login
URL для IIS:http://myIISMachine:7471/api/auth/login (Номер порта также указан в файле launchSettings.json)
Функция ConfigureServices в моем файле Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "http://localhost:5000",
ValidAudience = "http://localhost:5000",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("MySecretKey"))
};
});
services.AddCors(options =>
{
options.AddPolicy("EnableCORS", builder =>
{
builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials().Build();
});
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
И настройте функцию:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseCors("EnableCORS");
app.UseAuthentication();
//app.UseHttpsRedirection();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "api/{controller=Home}/{action=Index}/{id?}");
});
}
Файл launchSettings.json:
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:7471",
"sslPort": 44365
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/values",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"webapplication": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/values",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Что я здесь делаю не так? Или, может быть, это как-то связано с настройками на сервере IIS? Не могли бы вы мне помочь, пожалуйста?
Комментарии:
1. Откуда
steropes-02
берется? В ваших настройках IIS отображается URL-адрес приложения сlocalhost
.2. Steropes — это домен моего сервера, где расположен iis.
3. Это не настройка iis. Это настройка моего веб-сервиса
4. Пожалуйста, изучите некоторые основы IIS. Привязки сайта решают, какой URL вы используете, и launchSettings.json игнорируется.
5. Я указал только номер порта (7471) в привязках. Когда я указал только домен сервера с этим номером порта в браузере (без ‘api / auth / login’), он показывает мне каталог файлов моего сервиса. Соединение со службой в iis не является проблемой. Проблема заключается в отправке запроса post (или любого другого) с помощью той же службы в iis.