【问题标题】:WebAPI async Task<IHttpActionResult> passing modelWebAPI async Task<IHttpActionResult> 传递模型
【发布时间】:2019-12-13 20:54:37
【问题描述】:

这是我的控制器

public class TutorController : ApiController
{

    [Route("CreateTutor")]
    public async Task<IHttpActionResult> CreateTutor(TutorModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }            

        return Ok();
    }
}

我正在使用 Fiddler 连接到它

发布http://localhost:12110/api/Tutor/CreateTutor

我已设置原始和应用程序/应用程序

在我的身体里

{
  "Name": "Test"
}

但我收到此错误 { "Message": "没有找到与请求 URI 'http://localhost:12110/api/Tutor/CreateTutor' 匹配的 HTTP 资源。", "MessageDetail": "在控制器 'Tutor' 上找不到与请求匹配的操作。" }

知道我做错了什么吗?

【问题讨论】:

  • 您的 Startup.cs 文件是什么样的?您可能没有使用“api/controller/action”的默认路由。你也可以尝试在你的控制器方法上放置 [HttpPost] 属性。
  • 当您应用Route 属性时,您将覆盖WebApiConfig 文件中的默认路由。尝试使用以下命令访问您的控制器...它可能会起作用,但认为这可能不是您想要的:localhost:12110/CreateTutor

标签: c# asp.net-web-api routing asp.net-web-api2


【解决方案1】:

API 控制器中的每个方法都必须有一个属性来确定它

您的方法中缺少 action 属性,例如例如。下面

[Route("api/[controller]")]
[ApiController]
public class TutorController : ApiController
{

    [HttpPost]
    [Route("CreateTutor")]
    public async Task<IHttpActionResult> CreateTutor(TutorModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }            

        return Ok();
    }
}

在 MS 文档中了解更多信息: https://docs.microsoft.com/en-US/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#http-methods

【讨论】:

  • 谢谢,原来我在类上方缺少 [RoutePrefix("api/Tutor")],在没有 [HttpPost] 属性的情况下仍然可以工作
  • 这不是真的。见routing
猜你喜欢
  • 2015-11-27
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2017-06-12
相关资源
最近更新 更多