【问题标题】:what's wrong with my asp.net core controller method?我的 asp.net 核心控制器方法有什么问题?
【发布时间】: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


【解决方案1】:

正如对类似(但不同)问题的回答所述:Can't bind params using [FromQuery] ASP Net Core 2 API

[FromHeader]、[FromQuery]、[FromRoute]、[FromForm]:使用这些来指定要应用的确切绑定源。

他们引用了这个链接:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-2.1,其中讨论了各种模型绑定方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多