发布时无法命中 AspNetCore 3.1 MVC API 端点

Posted

技术标签:

【中文标题】发布时无法命中 AspNetCore 3.1 MVC API 端点【英文标题】:Cannot hit AspNetCore 3.1 MVC API endpoints when published 【发布时间】:2021-06-13 13:26:46 【问题描述】:

AspNetCore 3.1 MVC API。常规启动

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

    if (env.IsDevelopment())
    
        app.UseDeveloperExceptionPage();
    

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    
        endpoints.MapControllers();
    );

在 localhost 上运行时,我可以访问所有端点。当我发布时,所有端点都返回 404。

为了测试我发布到正确的位置,我添加了一个显示在浏览器中的端点

public IActionResult Index()

    return Content("Users Index");

当我浏览到 https://subweb.mainweb/users/api/users/index时,我看到浏览器中返回了 Users Index,但所有其他端点都返回 404。

控制器被装饰

[Route("api/Users/[action]")]
public class UsersController : ControllerBase

所有其他端点都被修饰,例如

[HttpGet]
[ActionName(nameof(IsRegisteredUser))]
public IActionResult IsRegisteredUser()

但我不明白这会对本地运行和服务器上的运行产生什么影响。

怎么可能所有端点都在 localhost 中可用,但发布时只有测试端点?我从哪里开始看?

【问题讨论】:

请仔细检查您输入的请求网址,它可能看起来像https://subweb.mainweb/users/api/users/IsRegisteredUser,请不要错过/api/users/[action]之前的“users”。此外,请检查是否有任何重写规则应用于您服务器上的站点/应用程序。 @Fei Han 你有鹰眼!这是一个失踪的用户。请提出作为答案,以便我接受。 嗨@Vague,很高兴听到它确实有助于解决问题。我已将其发布为答案,希望它可以帮助其他社区成员快速解决类似问题。 【参考方案1】:

当我浏览到 https://subweb.mainweb/users/api/users/indexI 时,请参阅浏览器中返回的用户索引,但所有其他端点都返回 404。

根据您上面的示例 URL,您似乎将 ASP.NET Core Web API 应用程序作为子应用程序(子应用程序)托管在服务器上的 /users

要访问端点,您应该确保在 URL 中包含子应用的路径库,否则会导致 404 - Not Found 错误。

【讨论】:

以上是关于发布时无法命中 AspNetCore 3.1 MVC API 端点的主要内容,如果未能解决你的问题,请参考以下文章

无法在 .net core 3.1 中注入依赖项

尝试激活“AuthenticateController”时无法解析“Microsoft.AspNetCore.Identity.UserManager”类型的服务

尝试激活“AuthController”时无法解析“Microsoft.AspNetCore.Identity.UserManager”类型的服务

.Net core 3.1 控制台应用程序中没有“Microsoft.AspNetCore.Hosting.Server.IServer”类型的服务已注册错误

.NET Core 3.0或3.1 类库项目中引用 Microsoft.AspNetCore.App

尝试激活“Student.Controllers.MyController”时无法解析“Microsoft.AspNetCore.Mvc.ActionContext”类型的服务