0

そのため、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);
    }'

WebApi コントローラーのserviceは 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 メソッドが機能し始めました。

誰かが「理由」の説明を持っている場合は、今後の参考のために知りたい.

4

0 に答える 0