繁体   English   中英

.Net Core 3.1 Web API 在新控制器上抛出 404

[英].Net Core 3.1 Web API Throwing 404 on new Controller

我在 .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);
        }            
    }
}

当我 POST 到这个方法时,我收到一个 404。我正在使用 url https://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 属性中的参数自己形成它。

暂无
暂无

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

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