3

APIコントローラーに2つのHttpPostメソッドがあり、APIにアクセスすると、500の内部サーバーエラーが発生します。

しかし、驚くべきことに、HttpPostメソッドの1つを削除すると、APIを正常にヒットして、必要な情報を取得できます。

何が問題になるのか考えてみませんか?

これらは2つの方法です

    [HttpPost]
    [ActionName("PostUser")]
    public HttpResponseMessage PostUser([FromBody]string id)
    {
        var accessToken = id;
        var client = new FacebookClient(accessToken);
        dynamic result = client.Get("me", new { fields = "name,email" });
        string name = result.name;
        string email = result.email;


        var existingUser = this.Repository.FindByUserIdentity(name);

        if (existingUser == null)
        {
            var newUser = new User
            {
                Username = name,
                Email = email,

            };

            var success = this.Repository.CreateAccount(newUser);

            if (!success)
            {
                return Request.CreateResponse(HttpStatusCode.InternalServerError);
            }

            //return created status code as we created the user
            return Request.CreateResponse<User>(HttpStatusCode.Created, newUser);
        }

        return Request.CreateResponse(HttpStatusCode.OK);

    }

    [HttpPost]
    [ActionName("PostEmail")]
    public HttpResponseMessage PostEmail([FromBody]string id)
    {
        var accessToken = id;
        var client = new FacebookClient(accessToken);
        dynamic result = client.Get("me", new { fields = "email" });
        string name = result.name;
        string email = result.email;


        var existingUser = this.Repository.FindByUserIdentity(name);

        if (existingUser == null)
        {
            var newUser = new User
            {                   
                Email = email

            };

            var success = this.Repository.CreateAccount(newUser);

            if (!success)
            {
                return Request.CreateResponse(HttpStatusCode.InternalServerError);
            }

            //return created status code as we created the user
            return Request.CreateResponse<User>(HttpStatusCode.Created, newUser);
        }

        return Request.CreateResponse(HttpStatusCode.OK);

    }

編集:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Competition", action = "all", id = UrlParameter.Optional }
        );
    }
4

1 に答える 1

4

コントローラに2つのPostメソッドがあり、慣例によりWebApiは1つのPostメソッドしか許可しないためです。

2つまたは複数のPostメソッドを構成するには、ルート設定を構成する必要があります。

詳細については、次の回答をご覧ください

MVC4WebAPIコントローラーの複数のHttpPostメソッド

于 2012-10-24T10:04:52.830 に答える