c# - .Net Core 3.1 Web API 在新控制器上抛出 404
问题描述
我在 .net core 3.1 的全新 web api 项目中创建了一个新控制器。每当我尝试发布到路线时,我都会收到 404。
控制器设置如下:
[ApiController]
[Route("[controller]")]
public class AuthCodeController : Controller
{
private readonly ApplicationContext _context;
public AuthCodeController(ApplicationContext context)
{
_context = context;
}
[HttpPost]
[Consumes("application/x-www-form-urlencoded")]
public JsonResult GetAuthCode(AuthCode authCode)
{
try
{
var theCodes = _context.AuthCodes.ToList();
var tmpCode = new Random();
var myNum = tmpCode.Next(100000, 999999999);
while (theCodes.Any(tc => tc.AuthCodeRnd == myNum))
{
myNum = tmpCode.Next();
}
if (authCode.AuthCodeRnd > 0)
{
var removeCode = _context.AuthCodes.FirstOrDefault(c => c.AuthCodeRnd == authCode.AuthCodeRnd);
if (removeCode != null) _context.AuthCodes.Remove(removeCode);
}
Guid authGuid = Guid.NewGuid();
var tmpRec = new AuthCode
{
Guid = authGuid,
AuthCodeRnd = myNum,
Address = authCode.tAddress,
SmallLogoAddress = authCode.SmallLogoAddress,
ClientFolder = authCode.ClientFolder,
CompanyFolder = authCode.CompanyFolder,
Folder = authCode.Folder
};
_context.AuthCodes.Add(tmpRec);
_context.SaveChanges();
var retVals = new AuthResponse
{
Guid = authGuid,
ReturnAuthCode = myNum
};
return Json(retVals);
}
catch (Exception ex)
{
var message = new ErrorResponse();
message.Status = "An Error Has Occured";
message.Message = ex.ToString();
return Json(message);
}
}
}
当我发布到此方法时,我收到 404。我正在使用 urlhttps://localhost:44328/AuthCode/GetAuthCode
我在 startup.cs 中所做的唯一修改是添加 dbcontext 服务选项。其他一切都是默认的。我可以让天气预报显示。
编辑 - 添加了 startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
已解决:我需要在 POSTMan 中禁用 SSL 验证
解决方案
您应该设置属性:[HttpPost]
→[HttpPost("GetAuthCode")]
因为您的原始路线将是简单的 POST 到“ https://localhost:44328/AuthCode ”。核心控制器确实使用对您的控制器名称“AuthCodeController”的反射来为您的路径(“/AuthCode”部分)形成前缀。但它不使用反射从函数名称形成后缀 - 您应该通过 HttpPost 属性中的参数自己形成它。
推荐阅读
- html - 有没有办法让 flexbox 与 Django 一起工作?
- c++ - 对于读取中间的每个字符,C++ pgm 文件读取默认为 38?
- stored-procedures - 使用相同的用户但在不同的机器上创建和编辑 MariaDB 过程
- c - 如何修复使用双字符指针打印文件中读取的代码的代码
- c++ - 从嵌套 for 循环中的 j = i +1 vs j = 1 开始
- python - Skimage regionprops 特征的(面积,欧拉数)尺寸在 Python 中不正确
- javascript - 如何在 Shiny 上为旋钮输入添加动画和百分比
- fullcalendar - 使用脚本标签创建一个新的 Draggable 对象
- watchkit - Apple watchOS 6.1 isBatteryMonitoringEnabled 未设置为 true
- r - 将 R 中的现有数据转换为 Phyloseq OTU 表