所以我试图通过 WPF 服务附加到 web api 方法,但在 GET 之外的任何东西上都只得到 500 错误。
WPF 调用:
using (var client = new HttpClient())
{
var user = new MyUser
{
EntityID = Guid.NewGuid(),
FirstName = "WPF",
LastName = "test"
};
var formatter = new JsonMediaTypeFormatter();
HttpContent content = new ObjectContent<MyUser>(user, formatter);
client.BaseAddress = new Uri("http://localhost:19527/api/");
var response = await client.PostAsJsonAsync("MyUser", content);
//.ContinueWith((postTask) => result = (postTask.Result.Content == null) ? "Could not create user" : "User created successully!");
var r = response.StatusCode;
}'
...和接收控制器:
public HttpResponseMessage Get(string badgeId)
{
return Request.CreateResponse<bool>(HttpStatusCode.OK, (service.UserByBadge(badgeId) != null));
}
public HttpResponseMessage Put(MyUser user)
{
return Request.CreateResponse<bool>(HttpStatusCode.OK, service.UpsertUser(user));
}
public HttpResponseMessage Post(MyUser user)
{
if (service.UpsertUser(user)) return Request.CreateResponse<MyUser>(HttpStatusCode.OK, service.Get<MyUser>(u => u.BadgeID == user.BadgeID));
return Request.CreateResponse<MyUser>(HttpStatusCode.NoContent, null);
}'
WebApiservice
控制器上的 GenericRepository 工作正常,因为 Get 方法按预期返回。只有当我使用 Post 时,我才会收到错误消息。调试方法会在 Get 中抛出断点,但不会在 Post 中,所以我认为它从未被调用过。
这是路由配置:
routes.MapRoute(
name: "Default",
url: "api/{controller}/{action}/{id}",
defaults: new { controller = "{controller}", action = "{action}", id = UrlParameter.Optional }
);
我尝试了其他 SO 帖子中的不同示例,但似乎没有一个专门解决这个问题。我猜我构建Post()
方法的方式有问题吗?
==================================================== ===============
解决方案:正在传递的模型未通过属性验证。为什么这会导致 500,不确定。但是一旦我解决了这个问题,API 方法就开始起作用了。
如果有人有“为什么”的解释,很想知道以供将来参考。