Часовой пояс Web Api - PullRequest
       9

Часовой пояс Web Api

0 голосов
/ 04 марта 2020

У меня проблемы с часовыми поясами. Мое приложение использует Angular и MVC web api для серверной части. На моей локальной машине все работает правильно, потому что сервер и браузер находятся в одном часовом поясе. Когда я развертываю его, я получаю неправильную дату / время.

У меня есть метод сохранения:

    save(individualModel: IndividualModel, applicationId?: number) {
        let urlParams = new HttpParams();
        if (applicationId !== null && typeof applicationId !== 'undefined') {
            urlParams = urlParams.append('applicationId', applicationId.toString());
        }
        return this.http.post<IndividualModel>('api/Individual/Save', individualModel, {params: urlParams})
    }

export class IndividualModel {
    firstName: string;
    middleName: string;
    lastName: string;
    dob: Date;
    address: AddressModel;
    contact: ContactModel[];
    photos: PhotosModel;

    constructor(
        firstName?: string, 
        middleName?: string, 
        lastName?: string, 
        dob?: Date, 
        address?: AddressModel, 
        contact?: ContactModel[], 
        photos?: PhotosModel
    ) {
        this.firstName = firstName || null;
        this.middleName = middleName || null;
        this.lastName = lastName || null;
        this.dob = dob || null;
        this.address = address || new AddressModel();
        this.contact = contact || [];
        this.photos = photos || new PhotosModel();
        this.recordState = recordState || null;
    }
}

Back-end web api

[HttpPost()]
public virtual async Task<HttpResponseMessage> Save(Individual individualModel, int? applicationId = default(Integer?)
)
{
    try
    {
        return Request.CreateResponse(HttpStatusCode.OK, await individualModel.Save(applicationId));
    }
    catch (Exception ex)
    {
        Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
    }
}

public virtual async Task<Individual> Save(int? applicationId = null, int? UserIdStamp = null)
{
    using (SqlClient.SqlConnection connection = new SqlClient.SqlConnection(ConnectionString))
    {
        using (SqlClient.SqlCommand cmd = new SqlClient.SqlCommand())
        {
            cmd.Connection = connection;
            if (System.Configuration.ConfigurationManager.AppSettings("CommandTimeout") != null)
                cmd.CommandTimeout = System.Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings("CommandTimeout"));
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "[Individual_Save]";
            cmd.Parameters.AddWithNullableValue("@Id", Id);
            cmd.Parameters.AddWithNullableValue("@FirstName", FirstName);
            cmd.Parameters.AddWithNullableValue("@MiddleName", MiddleName);
            cmd.Parameters.AddWithNullableValue("@LastName", LastName);
            cmd.Parameters.AddWithNullableValue("@UserIdStamp", UserIdStamp);
            if (DOB.HasValue)
                cmd.Parameters.AddWithNullableValue("@DOB", DOB.Value.ToLocalTime());
            cmd.Parameters.AddWithNullableValue("@ApplicationId", ApplicationId);
            await cmd.Connection.OpenAsync();
            using (var reader = await cmd.ExecuteReaderAsync())
            {
                while ((await reader.ReadAsync()))
                    Refresh(reader);
            }
        }
    }
    return this;
}

Что делает конвертировать в UT C правильно для моего часового пояса, но сервер отстает от меня на 3 часа. От сервера к веб-интерфейсу API 1987-04-25T00: 00: 00, который преобразуется в 25.04.1987, 12:00. С моего компьютера на сервер 1987-04-24T04: 00: 00.000Z, который преобразуется в 24.04.1987. 9 00:00 Поскольку это дата рождения человека, ее не следует конвертировать в зависимости от часового пояса.

...