我正在尝试在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:
这里有很多关于这两个错误消息的线程。我读了很多,但尚未找到解决方案。其中一人说要改变这个:
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; }
}
答案 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>