1

Web API アプリケーションに問題があります。データベースに新しいユーザーを投稿 (保存) しようとすると、内部エラー 500 が発生します。以下の関数は、クライアント呼び出しを行うために使用する関数です。

public void InsertNewUser(RegisterModel pNewUser, string pEmail)
{
    // Build rest uri
    string lREST_Uri_Browse = string.Format(@"api/accountapi/saveuserdata"
    // User data
    /*pModelSerialized*/);

    // Complete URI
    string lREST_Uri = Helpers_API.endPoint + lREST_Uri_Browse;

    var client = new HttpClient();

    client.BaseAddress = new Uri(Helpers_API.endPoint);

        var newUser = new Models.Models_API.Users
        {
            Email = pNewUser.Email,
            FName = pNewUser.FName,
            LName = pNewUser.LName,
            Inserted = DateTime.Now,
            ActiveAcc = true,
            AccType = pNewUser.AccType,
            BCompanyID = pNewUser.CompanyID,
            PID = pNewUser.PID,
            Password = pNewUser.Password,
            Token = GetToken(pEmail),
            ThirdParty = 0,
            Gender = pNewUser.Gender,
            BirthDate = pNewUser.BirthDate
        };

        // Add an Accept header for JSON format.
        //client.DefaultRequestHeaders.Accept.Add(
        //    new MediaTypeWithQualityHeaderValue("application/json"));
        // Create the JSON formatter.
        MediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter();

        // Use the JSON formatter to create the content of the request body.
        HttpContent content = new ObjectContent<Models.Models_API.Users>(newUser, jsonFormatter);

        var result = client.PostAsync(lREST_Uri_Browse, content).Result;
}

これがモデルです

public class Users
{
    public int BrokerID { get; set; }
    public DateTime Inserted { get; set; }
    public string Email { get; set; }
    public string FName { get; set; }
    public string LName { get; set; }
    public bool ActiveAcc { get; set; }
    public int BCompanyID { get; set; }
    public int PID { get; set; }
    public int AccType { get; set; }
    public string Password { get; set; }
    public string Token { get; set; }
    public int Gender { get; set; }
    public DateTime BirthDate { get; set; }
    public int ThirdParty { get; set; }
}

以下は APIController の POST です。

public HttpResponseMessage SaveUserData(Users pNewUser)
    {
        bool createUser = false;
        // First check for provided email in DB
        Users existingUser = asigCtx.Users.Where(u => u.Email == pNewUser.Email).SingleOrDefault();
        if (existingUser == null)
            createUser = true;
        else if (existingUser.ActiveAcc)
            createUser = true;

        if (createUser)
        {
            using (asigCtx = new AsigPrimeContext())
            {
                Users user = new Users()
                {
                    Email = pNewUser.Email,
                    FName = pNewUser.FName,
                    LName = pNewUser.LName,
                    Inserted = DateTime.Now,
                    ActiveAcc = true,
                    AccType = pNewUser.AccType,
                    BCompanyID = pNewUser.BCompanyID,
                    PID = pNewUser.PID,
                    Password = pNewUser.Password,
                    Token = pNewUser.Token,
                    ThirdParty = 0,
                    Gender = pNewUser.Gender,
                    BirthDate = pNewUser.BirthDate,
                };

                asigCtx.Users.Add(user);

                asigCtx.SaveChanges();
            }
        }
        var response = Request.CreateResponse<Users>(HttpStatusCode.Created, pNewUser);
        return response;
    }

私はこれが初めてで、ただそれを正しくやりたいだけなので、誰かがこのコードでアドバイスをくれますか? TNX

4

5 に答える 5

0

LINQコードにエラーがあったようです

Users existingUser = asigCtx.Users.Where(u => u.Email == pNewUser.Email).SingleOrDefault();

これを解決した後、リクエストは問題ありませんでした。

ヘルプのための Tnx :) 感謝します。

于 2013-06-09T20:16:39.970 に答える
0

jQuery を使用して Json を同じ URL ( $.post(@"api/accountapi/saveuserdata", { Email: "e@example.com", FName = "Vlad" ... }))に投稿InsertNewUserし、方程式から除外します。それでも で nullpNewUserパラメータを取得する場合SaveNewuserは、API のルート構成を調べて、サーバーが を期待していることを確認しますSaveUserData(Users)。jQuery からnull 以外を取得した場合は、pNewUserからの出力を詳しく調べますInsertNewUser。賭ける必要がある場合は、ルーティング構成にお金をかけます。

于 2013-06-09T14:45:17.100 に答える