猿问

为什么 Asp.net core Web API 2.0 返回 Http Error 500

我已将 api 移动到与模板通常提供的文件夹结构不同的文件夹结构中。


结构看起来像这样


API

  Controllers

     LoginController.cs

LoginController 有一个基本的方法


[Route("api/[Login]")]

    public class LoginController : ControllerBase

    {

        [HttpGet]

        public ActionResult<IEnumerable<string>> Get()

        {

            return new string[] { "value1", "value2" };

        }

    }

程序.cs


public class Program

    {

        public static void Main(string[] args)

        {

            CreateWebHostBuilder(args).Build().Run();

        }


        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>

            WebHost.CreateDefaultBuilder(args)

                .UseStartup<Startup>();

    }

启动文件


public class Startup

    {

        public IConfiguration Configuration { get; set; }

        public Startup(IConfiguration configuration)

        {

            Configuration = configuration;

        }


        // This method gets called by the runtime. Use this method to add services to the container.

        public void ConfigureServices(IServiceCollection services)

        {

            services.AddCors();

            services.AddOptions();

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        }


        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)

        {

            app.UseCors(builder => builder

            .AllowAnyOrigin()

            .AllowAnyMethod()

            .AllowAnyHeader()

            .AllowCredentials());


            app.UseMvc();


            app.Run(async (context) =>

            {

                await context.Response.WriteAsync("Hello World!");

            });

        }

    }

该解决方案构建良好。当我尝试使用以下网址访问页面时,它只是设置


localhost is currently unable to handle this request.

HTTP ERROR 500

.


https://localhost:44352/api/login/get

https://localhost:44352/API/Controllers/login/get

做一些设置需要添加返回的内容。


慕田峪4524236
浏览 359回答 1
1回答

守候你守候我

您没有定义默认路由,这很好,但是您完全依赖于每个控制器和定义了属性路由的操作。在您的 上LoginController,您确实有一个路由属性,但它不正确。括号用于替换某些路由值,如区域、控制器等;这并不表明您的实际控制器名称应该放在那里。换句话说,您需要[Route("api/Login")]或[Route("api/[controller]")],其中后者将Login被 ASP.NET Core替换为控制器名称。此外,当使用路由属性时,动作名称不再起作用。如果不定义路由,则与定义空路由相同,即[HttpGet("")].&nbsp;因此,即使修复了您的控制器路由,该操作的 URL 仍然只是/api/login,而不是&nbsp;/api/login/get。如果你想要get,那么你需要将路由设置为:[HttpGet("get")]。
随时随地看视频慕课网APP
我要回答