我的WebAPI控制器的Web API调用一个复杂的对象作为参数
[HttpPost]
public ISearchProviderCommandResult ExecuteCommand(ISearchProviderCommand command)
{
MySearchProvider searchProvider = new MySearchProvider();
return searchProvider.ExecuteCommand(command);
}
我searchCommand对象
[Serializable]
class SearchProviderCommand : ISearchProviderCommand
{
public string OperationContext {get; set;}
public string OperationId{get; set;}
}
我就行了 HttpWebResponse响应我的WebAPI控制器一个破发点和断点=(HttpWebResponse)request.GetResponse();
当我尝试进入webapi控制器时,出现500错误,它甚至没有击中webapi控制器内的断点。这里是我的问题:
- 我在做什么错?
- 我可以发送复杂的对象到web api请求吗?
编辑: 基础上asp.net论坛和LEONS方向我改变了我的WebAPI控制器使用对象而不是接口,它的工作原理:
[HttpPost]
public SearchProviderCommandResult ExecuteCommand(SearchProviderCommand command)
{
MySearchProvider searchProvider = new MySearchProvider();
return searchProvider.ExecuteCommand(command);
}
你能告诉我怎样重建我的结果是什么?
编辑:根据莱昂的建议 - 为那些有兴趣谁在这里是我最后的调用者的代码
public result ExecuteCommand(ISearchProviderCommand searchCommand)
{
//serialize the object before sending it in
JavaScriptSerializer serializer = new JavaScriptSerializer();
string jsonInput = serializer.Serialize(searchCommand);
HttpClient httpClient = new HttpClient() { BaseAddress = new Uri(ServiceUrl) };
StringContent content = new StringContent(jsonInput, Encoding.UTF8, "application/json");
var output = httpClient.PostAsync(ServiceUrl, content).Result;
//deserialize the output of the webapi call
result c = serializer.Deserialize<result>(output.Content.ReadAsStringAsync().Result);
return c;
}
}
public class result : ISearchProviderCommandResult
{
public object Result { get; set; }
}
您可以将自定义对象作为参数传递给动作。根据您使用的属性前缀的http方法,您可以使用[FromBody]进行发布。 – gdp
我曾试过,甚至在我发布这个问题之前,可悲的是,没有做到这一点,我应该更新我的问题与属性? –