[英]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.