繁体   English   中英

ASP.NET Core Web Api 控制器端点都返回 404 错误

[英]ASP.NET Core Web Api controller end points are all returning 404 error

我有一个 ASP.NET Core 3.1 Web Api 项目,它有 9 个 ApiControllers,每个控制器有多个端点。 每个控制器端点都与构建在 Dapper ORM 上的工作单元/存储库模式进行通信。

所有控制器类标头如下所示:

[Route("api/[controller]")]
[ApiController]
public class AuthController : ControllerBase
...

此 Api 与 Xamarin Android 项目通信以发送和接收数据。

自早春以来,该解决方案一直运行良好。 我对存储库层进行了一些更改以修改查询,并且代码编译正确。 当我现在在本地主机和 Web 主机服务器上运行应用程序时,从 Postman 测试的所有端点都返回 404 错误。 Nuget 包、appsettings.json 或 launchsettings.json 中没有任何更改。

我一直试图解决这个问题 2 天,真的需要一些帮助。 我已经查看了所有可以找到的具有核心的相关帖子,但我没有看到与我的问题相匹配的帖子。

我还能提供哪些其他信息?

瑞安

更新 1 这是一个被调用以验证用户身份的示例方法:此 url 将被称为“https://localhost:44365/api/auth/authenticate”

[HttpPost("authenticate")]
        public async Task<ActionResult<Login>> Authenticate([FromBody] Login login)
        {
            // login will come in from the device with basic auth
            string token = string.Empty;
            string username = login.UserName;
            string password = login.Password;
            int product = login.Product;
            string deviceName = login.DeviceName;
            try
            {
                bool isAuth = await _unitOfWork.Logins.GetAuthenticateUser(username, password, product);
                if(isAuth == false)
                {
                    return StatusCode(401);
                }

                //check for preference record
                bool exists = await _unitOfWork.Sessions.CheckForDevice(deviceName, product);
                if(!exists)
                {
                    // auto add the device
                    Prefs prefs = new Prefs();
                    SecurityUser user = await _unitOfWork.Logins.GetUserInfo(username, product);
                    prefs.deviceName = deviceName;
                    prefs.product = product;
                    prefs.facilityId = user.facID;
                    prefs.addedBy = username;
                    prefs.active = true;
                    prefs.timeout = "480";
                    int result = await _unitOfWork.Sessions.AddDevice(prefs, product);
                }

                Jwt j = new Jwt(_unitOfWork);
                try
                {
                    login.Token = j.CreateToken(username, deviceName, product);
                    SessionModel session = new SessionModel();
                    session.SessionStart = DateTime.Now;
                    login.SessionStart = session.SessionStart;
                    session.UserName = username;
                    session.Token = login.Token;
                    await _unitOfWork.Sessions.AddSession(session, product);
                }
                catch (Exception ex)
                {
                    //delete session if there is jwt error
                    await _unitOfWork.Sessions.DeleteAsyncByUserName(username, product);
                    var msg = $"Error message from create token - Inner Exception: {ex.InnerException} Exception Message: {ex.Message} Source: {ex.Source}";
                    login.Message = msg;
                    login.UserName = String.Empty;
                    login.Password = String.Empty;
                    //return login object with message 
                    return login;
                }
            }
            catch (Exception ex)
            {
                var msg = $"Error message from Header Auth decode - Inner Exception: {ex.InnerException} Exception Message: {ex.Message} Source: {ex.Source}";
                login.Message = msg;
                login.UserName = String.Empty;
                login.Password = String.Empty;
                return login;
            }
            //return login obj with token, msg, session datetime
            login.UserName = String.Empty;
            login.Password = String.Empty;
            return login;
        }

更新 2 我最大的挑战是弄清楚为什么控制器端点在 5 个月后突然返回 404 并且没有修改控制器代码。

更新 3 启动配置方法

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

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

        }

我在 appsettings.json 文件中发现,json 中有一个 C# 风格的注释。 删除该评论似乎解决了问题。

我在 Azure 上托管的 WebAPI 遇到了类似的问题。 我对 NuGET 包进行了升级,并迁移到了 OData 版本 8。这突然使我的查询在过滤器中区分大小写。 假设我的数据库中有一个字段“State”,我用“https://localhost:5555/Adresses?$filter=state eq 'NY'”查询它然后给了我一个错误,因为我查询的是 state 而不是为州。 另一件事可能是,如果您在 Azure 上使用 API 管理,您的 Swagger 文件已损坏,并且 API 管理中的链接不存在。 也许这对你有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM