没有找到与请求URI匹配的HTTP资源 - 并且 - 在控制器上找不到与请求匹配的操作

时间:2017-04-27 20:57:44

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

我正在尝试在API应用程序中构建一个新端点,该端点已经有很多其他端点正常工作。不确定我做错了什么。我收到两个错误:

  

消息:未找到与请求URI匹配的HTTP资源' http://localhost:62342/api/VoiceMailStatus

  

MessageDetail:未在控制器上找到任何操作' VoiceMailStatus'与请求匹配。

这是控制器:

public class VoiceMailStatusController : ControllerBase
{
    [HttpPost]
    [Route("api/VoiceMailStatus")]
    public string VoiceMailStatus(string var)
        {
            ...
        }
}

以下是路线:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

我使用PostMan:

enter image description here

这里有很多关于这两个错误消息的线程。我读了很多,但尚未找到解决方案。其中一人说要改变这个:

public string VoiceMailStatus(string var)

到此:

public string VoiceMailStatus(string var = "")

虽然这确实让错误消失了但我在调试时能够进入方法,var总是只是一个空字符串。

编辑:GOT IT WORKING

除了按照Andrii Litvinov的回答添加[FromBody]之外,我还需要做一件事。这是什么:

public string VoiceMailStatus(string var)
{
     ...
}

现在是这样的:

public string VoiceMailStatus([FromBody] VMStatus request)
{
     ...
}

然后VMStatus只是一个小的类,只有一个string属性:

public class VMStatus
{
    public string var { get; set; }
}

2 个答案:

答案 0 :(得分:0)

您可能希望将此添加到您的控制器,因为您在路由配置中有api:

[RoutePrefix("API/VoiceMailStatus")]

然后将其添加到您的操作中:

[Route("VoiceMailStatus", Name = "VoiceMailStatus")]

这应该将操作绑定到url localhost / api / voicemailstatus / voicemailstatus

答案 1 :(得分:0)

您很可能需要将FromBody属性应用于参数:

public string VoiceMailStatus([FromBody] string var)

如果这样做没有帮助尝试将参数重命名为其他内容,例如:var1,因为var在C#中保留了工作并且可能导致一些绑定问题,但我怀疑是这种情况。< / p>