【发布时间】:2020-03-27 16:09:24
【问题描述】:
在我的 asp.net 核心应用程序中,我们在 App StartUp 配置中使用默认的 MVC 路由。
然后在我们的控制器中,我们的 api 端点方法之一具有以下代码:
[HttpGet]
[Route("services/task/{taskid?}/{taskmessage?}")]
[Produces("text/html")]
public async Task<ActionResult> TaskMessage(string taskId = null, string queue = null, string taskmessage = null)
然后我们尝试通过仅将 taskmessage 作为以下 URL 传递来调用端点:
http://localhost:12345/api/services/task?taskmessage=hello
但是,它在这里不起作用。谁能让我知道我哪里做错了?它在我们的 ASP.Net 项目中工作,但是一旦我们迁移到 ASP.NET 核心,它就无法工作。
顺便说一句,我们目前使用的 ASP.NET Core F/W 版本是 ASP.NET Core 2.1,如果有关系的话。
【问题讨论】:
-
not working是什么意思?你有什么错误吗? -
嗨@MattU,对不起,我没有说清楚。此处不工作意味着在 URL 中我将值“hello”传递给参数“taskmessage”,但在方法参数中,“taskmessage”仍然为空。这是我们的问题。
-
我没有在 .Net Core 中尝试过。相反,我使用
[FromQuery]查询字符串参数。像这样:([FromQuery] string taskMessage)。您可以将其用于多个参数。而且Route属性中的模板更简单。 -
谢谢@MattU 我知道我们可以使用 [FromQuery] 作为查询字符串参数。但是,从设计的角度来看,我想知道为什么在 .Net Core 中没有绑定。为什么它与 .Net 不同......但是,无论如何,谢谢你,我刚刚尝试使用 [FromQuery] 并且它对我有用
-
另外,最好使用
HttpGet属性并在那里提供路由模板。[HttpGet("route/template")]。[Route]属性表示该操作将接受 all HTTP 动词。 docs.microsoft.com/en-us/aspnet/core/mvc/controllers/… ... 请参阅该部分中的绿色提示。
标签: asp.net-core asp.net-core-webapi asp.net-core-2.1