我的Controller方法被成功调用,视图模型加载数据,但在返回时抛出错误。
public AccountManagerViewModel Get(string id)
{
AccountManagerViewModel account = new AccountManagerViewModel(Guid.Parse(id));
return account;
}
我尝试将[Serializable]属性添加到类中,但没有运气。
我正在做的事情有意义吗?我们希望在新的Web API应用程序中重用我们的MVC应用程序中的尽可能多的代码,因此我们真的不希望创建新的类,我们必须从ViewModel手动填充并从Web API控制器方法返回。
答案 0 :(得分:0)
你真的需要看看错误是什么。也许GUID不正确?格式不正确或只是不退出?
这应该工作得很好。要记住的一件事是不要使用递归等序列化复杂模型。这可能是您可能遇到的另一个错误。 (但你也可以禁用递归序列化)
检查错误的最佳方法是在Chrome / Firefox中打开开发人员控制台并启用XMLHttpRequest日志记录。然后在控制台中,您可以单击红色响应并查看ASP.NET中的错误。
另一种检查代码是否被命中的方法是在代码的第一行放置一个断点,使其命中并运行客户端。然后,您还可以逐行检查错误的位置。
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.None;
答案 1 :(得分:0)
我知道这是一个古老的问题,但是希望答案会为寻找相同事物的人提供价值...
我认为您真正想做的是返回一个HTTP响应,其中包含ViewModel的序列化版本。如果将方法的返回类型更改为IHttpActionResult
,则可以使用内置的WebAPI函数来返回结果,包括自动序列化的ViewModel。
这看起来类似于以下内容。
public IHttpActionResult Get(string id)
{
AccountManagerViewModel account = new AccountManagerViewModel(Guid.Parse(id));
return Ok(account);
}
您也可以使用其他内置函数来返回不同的HTTP响应。例如
public IHttpActionResult Get(string id)
{
if (string.IsNullOrWhiteSpace(id)) return BadRequest("Empty id parameter");
AccountManagerViewModel account = new AccountManagerViewModel(Guid.Parse(id));
if (account is null) return NotFound();
return Ok(account);
}