Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET WebAPI-未找到任何操作_C#_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

C# ASP.NET WebAPI-未找到任何操作

C# ASP.NET WebAPI-未找到任何操作,c#,asp.net-mvc,asp.net-web-api,C#,Asp.net Mvc,Asp.net Web Api,我有以下代码,但请求总是在中结束(Foo()/Bar()),在与请求匹配的控制器“设备”上找不到任何操作。 我的WebApiConfig中有一个自定义路由: config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new {id = RouteParameter.Optional} ); 我的ASP.NET

我有以下代码,但请求总是在
中结束(Foo()/Bar()),在与请求匹配的控制器“设备”上找不到任何操作。

我的WebApiConfig中有一个自定义路由:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new {id = RouteParameter.Optional}
    );
我的ASP.NET WebAPI控制器:

[HttpPost]
public void UpdateToken(string newToken)
{
    _deviceHandler.UpdateToken(newToken);
}
要查询我的ASP.NET WebAPI,我正在使用RestSharp

private static void Send(string resource, Method method, object payload)
{
    var client = new RestClient(baseUrl);
    var request = new RestRequest(resource, method);
    request.XmlSerializer = new JsonSerializer();
    request.RequestFormat = DataFormat.Json;
    request.AddBody(payload);

    var response = client.Execute(request);
    // ... handling response (exceptions, errors, ...)
}

public void Foo()
{
    var newToken = "1234567890";
    Send("/api/device/updatetoken", RestSharp.Method.POST, newToken );
}

public void Bar()
{
    var newToken = new { newToken = "1234567890" };
    Send("/api/device/updatetoken", RestSharp.Method.POST, newToken );
}
避免此错误的唯一方法是创建一个包装类,其中包含一个属性(get;set;),该属性的名称为控制器参数(newToken)

我有很多请求发送一个或两个自定义字符串(未定义长度)作为post(get的长度有限)。但是为每个场景创建一个包装器实现是真正的开销!我在寻找另一条路


PS:我希望通过简化场景我没有犯任何错误=)

原语默认是从URI绑定的。如果希望图元来自主体,则应使用如下[FromBody]属性:

[HttpPost]
public void UpdateToken([FromBody] string newToken)
{
    _deviceHandler.UpdateToken(newToken);
}
"1234567890"
然后将使用适当的格式化程序反序列化该字符串。如果是JSON,请求主体应该如下所示:

[HttpPost]
public void UpdateToken([FromBody] string newToken)
{
    _deviceHandler.UpdateToken(newToken);
}
"1234567890"

谢谢,只是缺少[FromBody]-属性是错误。这才救了我一个晚上。我在想为什么这条路线会有404。它采用int,而我的其余路由采用引用类型。添加[FromBody]属性成功了。1为了挽救我半天的生命,我已经浪费了一半的时间。谢谢