我有以下代码,但请求结束 (Foo() / Bar()) 总是在No action was found on the controller 'Device' that matches the request.
我的 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)。
我有很多请求发送一个或两个自定义字符串(未定义长度)作为帖子(get 长度有限)。但是为每个场景创建一个包装器实现是真正的开销!我正在寻找另一种方式。
PS:我希望我通过简化场景没有犯任何错误=)