c# - .net 6 属性路由返回 404

标签 c# .net angular asp.net-core

几天前我问了一个类似的问题,但我现在遇到了另一个 Controller 的问题,我一生都无法弄清楚为什么会返回 404。

API Controller ...

[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();

Proxy.conf.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 Controller ...

[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();
    }
}

但无论我做什么...

https://localhost:44427/api/files/123 返回 404。

https://localhost:44427/api/files/DownloadFile/test.csv 返回 404。

其他 API Controller 方法可以工作,因此端口是正确的。

其他 api Controller 只有一个 GET,但每当我尝试使用属性路由添加多个 GET 时,它们都会返回 404。

最佳答案

解决了这个问题。

这是 proxy.conf.js。

我必须在上下文数组中将“/api/*”更改为“/api/**”,**似乎是一个包罗万象的东西。

关于c# - .net 6 属性路由返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74886924/

相关文章:

c# - 在不同的元素名称下序列化一个类

c# - .NET Compact Framework 2.0 和 Windows CE 上带图标的 ContextMenu/MenuItem

angular - 使用 RXJS 继续以 Angular 触发 http 调用,直到满足条件

angular - App_Initializer 不适用于 UI 路由器

c# - 如何检索 Oracle 过程或函数的主体

javascript - 尝试使用 async/await 而不是 browser.sleep,但它不起作用

c# - 通过 OracleDataReader 读取时处理 NULL 值?

c# - MediatR 多管道行为

c# - Azure DocumentDB异步请求问题

.net - 如何从/向 SQL Server BLOB 字段传输数据?