【发布时间】:2021-07-14 21:34:46
【问题描述】:
我有一个 ASP.NET Core 3.1 Web Api 项目,它有 9 个 ApiController,每个控制器有多个端点。 每个控制器端点都与基于 Dapper ORM 的工作单元/存储库模式进行通信。
所有控制器的类头如下所示:
[Route("api/[controller]")]
[ApiController]
public class AuthController : ControllerBase
...
此 Api 与 Xamarin Android 项目通信以发送和接收数据。
自早春以来,此解决方案一直运行良好。 我对存储库层进行了一些更改以修改查询,并且代码可以正确编译。当我现在在 localhost 和 Web 主机服务器上运行应用程序时,从 Postman 测试的所有端点都返回 404 错误。 Nuget 包、appsettings.json 或 launchsettings.json 中没有任何变化。
我已经尝试解决这个问题两天了,真的需要一些帮助。 我已经查看了所有我可以找到的具有核心的相关帖子,但我没有看到与我的问题相匹配的帖子。
我还能提供哪些其他信息?
瑞恩
更新 1 下面是一个被调用来验证用户身份的示例方法: 这个网址会被称为“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();
});
}
【问题讨论】:
-
你能显示一个你调用的url的操作方法和例子吗?
-
我添加了一个动作方法
-
[Route("api/[controller]")] 到 [Route("api/[controller]/[action]") 那么你的 url 将是 localhost:xxx/api/auth/authenticate ] 并确保邮递员设置为 POST 而不是 GET 有时会遗漏一些简单的事情。
-
谢谢。我已经验证了你给出的所有分数。
-
只是为了确认现在可以了吗?
标签: c# asp.net-core asp.net-web-api