几天前我问了一个类似的问题,但是我现在遇到了另一个控制器的问题,我一辈子都想不通为什么会返回404。
API控制器...
[Route("api/[controller]")]
[ApiController]
public class FilesController
{
private readonly IFilesService _filesService;
public FilesController(IFilesService filesService)
{
_filesService = filesService;
}
[HttpGet("{id}")]
public IEnumerable<SupportFile> GetFiles(int id) {
return _filesService.GetFiles(id);
}
[HttpGet("DownloadFile/{fileName}")]
public async Task<FileStreamResult> DownloadFile(string fileName)
{
return await _filesService.DownloadFile(fileName);
}
}
程序. cs ...
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddSingleton<DapperContext>();
builder.Services.AddScoped<IUserService, UserService>();
builder.Services.AddScoped<ISupportService, SupportService>();
builder.Services.AddScoped<IFilesService, FilesService>();
builder.Services.AddControllersWithViews();
builder.Services.AddControllers();
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.MapControllers();
app.UseRouting();
app.MapDefaultControllerRoute();
app.MapFallbackToFile("index.html"); ;
app.Run();
代理.配置. js ...
const { env } = require('process');
const target = env.ASPNETCORE_HTTPS_PORT ? `https://localhost:${env.ASPNETCORE_HTTPS_PORT}` :
env.ASPNETCORE_URLS ? env.ASPNETCORE_URLS.split(';')[0] : 'http://localhost:19229';
const PROXY_CONFIG = [
{
context: [
"/api/*"
],
target: target,
secure: false,
headers: {
Connection: 'Keep-Alive'
}
}
]
module.exports = PROXY_CONFIG;
另一个工作正常的API控制器...
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
private readonly IUserService _userService;
public UsersController(IUserService userService)
{
_userService = userService;
}
[HttpPost]
public User ModifyUser(AzureUser user)
{
return _userService.ModifyUser(user);
}
[HttpGet]
public IEnumerable<User> GetUsers()
{
return _userService.GetUsers();
}
}
但无论我做什么...
将返回一个404。
将返回一个404.
其他API控制器方法可以工作,因此端口正确。
其他的API控制器只有一个GET,每当我尝试使用属性路由添加多个GET时,它们都返回一个404。
3条答案
按热度按时间z9smfwbn1#
解决了这个问题。
它是proxy.conf.js。
我不得不在上下文数组中将“/API/*”更改为“/api/**”,**似乎是一个包罗万象的选项。
628mspwn2#
您的控制器应该继承类
ControllerBase
。而不是这个:
试试这个:
rggaifut3#
你试过调试吗?
ID为123或名称为test.csv的文件是否实际存在?
https://本地主机:44427/应用程序接口/文件/123
https://localhost:44427/api/files/下载文件/测试. csv
如果否,则服务方法可以返回空,这将默认地导致404。