Мне удалось развернуть интерфейс на IIS для локалхост: 80. Когда я просматриваю сайт из IIS, меня встречает созданный мной значок загрузки, который показывает, что интерфейс развернут правильно, но проблема в том, что загрузка никогда не прекращается, потому что запрос axios к "/api/account/ getcurrentuser» выдает ошибку 404. Серверной части не удается найти http://localhost:80/api/account/getcurrentuser.
Вот подробная информация об ошибке.
Так происходит. для всех запросов Axios. Сервер возвращает ошибку 404, сообщая, что ему не удалось найти ресурс. Физический путь, по которому он ищет, — C:\Website\EDIConverterDemo\wwwroot\api\account\getcurrentuser. Папка wwwroot находится в развернутой папке моего проекта. Оно должно туда заглянуть и мне нужно что-то добавить, или оно направлено не туда?
Приложение отлично работает при локальном запуске (не на IIS), а маршрут в мой контроллер соответствует URL-адресу в моем запросе GET axios.
Я думал, что мне, возможно, также потребуется развернуть внутреннюю библиотеку классов, но некоторые исследования в этом направлении показали, что я этого не делаю. необходимо развернуть его отдельно.
Я думаю, моя проблема заключается в Реагировать на проблему, особенно потому, что я использую Vite.
Это мой файл vite.config.js.
Может ли это быть проблема CORS или проблема с прокси-сервером Vite? Когда я запускаю свой проект локально (не в IIS), интерфейс реагирования основан на порте 3000, а все вызовы, начинающиеся с «/api», перенаправляются на мои контроллеры, которые размещены на порту 7264. Нужно ли мне изменить порты в прокси?
Код: Выделить всё
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
server: {
port: 3000,
strictPort : true,
proxy: {
'/api' : {
target: 'https://localhost:7264',
changeOrigin: true,
secure: false,enter image description here
rewrite: (path) => path.replace(/^\/api/, '/api')
}
}
}
})
Это контроллер, к которому должен обращаться /api/account/getcurrentuser:< /p>
Код: Выделить всё
namespace EDIConverterWeb.Web.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AccountController : ControllerBase
{
[HttpGet]
[Route("getcurrentuser")]
public User GetCurrentUser()
{
//here is some code that returns null if no user is signed in
//otherwise, returns the currently logged-in user (object)
}
}
}
Что-то неправильно настроено, что приводит к пропуску контроллера?
Код: Выделить всё
namespace EDIConverterWeb.Web
{
public class Program
{
private static string CookieScheme = "EDIConverter";
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(CookieScheme)
.AddCookie(CookieScheme, options =>
{
options.Events = new CookieAuthenticationEvents
{
OnRedirectToLogin = context =>
{
context.Response.StatusCode = 403;
context.Response.ContentType = "application/json";
var result = System.Text.Json.JsonSerializer.Serialize(new { error = "You are not authenticated" });
return context.Response.WriteAsync(result);
}
};
});
builder.Services.AddSession();
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseSession();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller}/{action=Index}/{id?}");
app.MapFallbackToFile("index.html"); ;
app.Run();
}
}
}
Код: Выделить всё
Я не думаю, что это проблема с React. Можете ли вы помочь мне понять, как получить API-часть моего приложения? работает при развертывании?
Подробнее здесь: https://stackoverflow.com/questions/791 ... h-a-404-er
Мобильная версия