gpt4 book ai didi

c# - 为什么我的 C# .Net Core Rest API 路由找不到我的方法?

转载 作者:行者123 更新时间:2023-12-04 09:30:46 25 4
gpt4 key购买 nike

我正在开发一个 API。
我有一个“AbstractController.cs”,但在调用带有两个参数的 GET 时遇到了困难。

[Route("api/[controller]")]
[ApiController]
public class AbstractController : ControllerBase
{
// GET: api/Abstract
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "missing implementation" };
}
转到 https://localhost:44363/api/abstract/会生成这个。
[“缺失的实现”]
惊人的!
现在我需要制作一个在演出年份中传递的 Get 方法,并编写一个 SQL 查询代码。够容易吗?
// GET: api/Abstract?ShowYear=2019&ShowCode=248621
[Route("api/{controller}/{ShowYear}/{ShowCode}")]
[HttpGet]
public Abstract Get(int ShowYear, int ShowCode) // GetAbstractByYearAndSHCode
{
string x = "";
return new Abstract();
}
无论我做什么我都无法让这个方法断点/进入执行!
我猜这是一个路由问题,但我已经尝试了最可靠的调用端点的方法。
enter image description here
现在,我会像任何有自尊的学习程序员一样检查 MS 文档。
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1

Endpoint routing in ASP.NET Core 3.0 and later:

Doesn't have a concept of routes. Doesn't provide ordering guaranteesfor the execution of extensibility, all endpoints are processed atonce.


GULP 听起来很吓人。
在这一点上,我还没有触及我的中间件。
我看过的所有例子都没有我的“MapControllers();”他们的 Startup.cs 中的方法。
这是因为它是 .NET Core 3.0/3.1 的新特性
方法:“ Adds endpoints for controller actions to the IEndpointRouteBuilder without specifying any routes.
好的,那么我还必须在这里手动指定路线吗?
我这样做了,它有点工作。
好吧,当我转到 https://localhost:44363/api/abstract/2019/287 时,它现在在 startup.cs 中断点
enter image description here
等等,它对我的​​ Controller 代码没有任何作用!为什么?
以下(也在上面)代码最终在 startup.cs 中声明为 null
                    var controller = context.Request.RouteValues["Abstract"];
希望了解我做错了什么。

MapGet("/api/abstract/{showYear}/{showCode}", ...);


这段代码不是负责将路由映射到我的 Controllers 文件夹中名为 AbstractController.cs 的 Controller 吗?没有碰到任何断点。
编辑 :
通读本文,比较 Startup.cs 与 .Net Core 2、2.2、MVC 项目与 3.0 的差异
读完所有这些,我感觉很好,我会找到问题所在。
https://andrewlock.net/comparing-startup-between-the-asp-net-core-3-templates/
编辑..没关系没有找到解决方案。
编辑 2 :
完全注释掉startup.cs中这段麻烦的代码:
endpoints.MapGet("/api/abstract/{showYear}/{showCode}", async context =>
{
var controller = context.Request.RouteValues["Abstract"];

var showYear = context.Request.RouteValues["showYear"];
var showCode = context.Request.RouteValues["showCode"]; // just an example.
//await context.Response.WriteAsync($"Hello {showYear} is your year, {showCode} for the code!");
//GetAbstractByYearAndSHCode();
});

endpoints.MapGet("/api/abstract/{showYear}", async context =>
{
var name = context.Request.RouteValues["name"];
await context.Response.WriteAsync($"Hello {name}!");
});
解决了我无法访问 Controller 的问题。
enter image description here
https://localhost:44363/api/abstract/2019命中,id值为2019,太好了。
https://i.imgur.com/rmHyDPg.png输出看起来很棒。
我仍然无法使用 > 1 个参数。 我如何简单地使用 Year 和 ShowCode 参数?语法是什么?
https://localhost:44363/api/abstract/2019

最佳答案

只需将参数添加到您的属性


[HttpGet("{ShowYear}/{ShowCode}")]

关于c# - 为什么我的 C# .Net Core Rest API 路由找不到我的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62864532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com