第三者からXMLを使用するには、Web APIのMVC RESTサービスを開発する必要があります。Web APIのmvc着信XMLルートが異なる
プロジェクトは、サンプルXMLファイルに基づいてCodeFirst Entity Frameworkを使用して作成されています。
アップデート、投稿、削除用のテストXMLファイルを受け取ったのは、驚いたことに、メソッドごとにルートxml要素が異なります。
POSTのルートは、PUTのルートは、私は根が常にすべてのメソッドのために、CreateSomethingされ作成されたモデルでは
をUpdateSometingさ
をCreateSomethingています。
別の方法で追加のモデルを作成する必要はありますか?または、これを回避する別の方法がありますか?
希望問題を明確にしました。事前
よろしく
EDITで
ありがとう: これは予想されるXML入力であるが、これはPOSTのために動作します。
<CreateBookingRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>a10601e4-c24d-4e7d-9c11-ae5a35fb5770</ID>
<ApiKey>sample string 2</ApiKey>
<Booking>
<BookingId>22c9a3ce-58d1-4a7e-b483-897e29aa3f6a</BookingId>
<Travellers>
<Traveller Id="8">
<TravellerId>0792a822-92d0-4e9a-88b2-f6fae02221f2</TravellerId>
<DateOfBirth>2016-04-13T11:56:02.4407937+02:00</DateOfBirth>
<Gender>sample string 3</Gender>
<FirstName>sample string 4</FirstName>
<LastName>sample string 5</LastName>
<CountryCode>sample string 6</CountryCode>
<PrefferedLanguageCode>sample string 7</PrefferedLanguageCode>
<Communication>
<CommunicationId>fbf1eeda-73bf-4381-a751-5a2da346e7a0</CommunicationId>
<Email>
<EmailId>45069245-c2af-4c55-934f-e033da0fbb5e</EmailId>
<Value>sample string 2</Value>
<Culture>sample string 3</Culture>
</Email>
<Sms>
<SmsId>261db3a9-d858-47e9-934b-07981d203155</SmsId>
<Value>sample string 2</Value>
<Culture>sample string 3</Culture>
</Sms>
<EmailId>6a4005d4-8f05-4999-9098-1078b2c12ebf</EmailId>
<SmsId>d5d8f3df-b08c-4954-9e6c-b29a3a74a3e8</SmsId>
</Communication>
<BookingId>4baf0cad-75d8-4067-a3d1-bd70f1b219ad</BookingId>
</Traveller>
</Travellers>
</Booking>
</CreateBookingRequest>
しかし、PUT XML入力は次のようになります。
<UpdateBookingRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>a10601e4-c24d-4e7d-9c11-ae5a35fb5770</ID>
<ApiKey>sample string 2</ApiKey>
<Booking>
<BookingId>22c9a3ce-58d1-4a7e-b483-897e29aa3f6a</BookingId>
<Travellers>
<Traveller Id="8">
<TravellerId>0792a822-92d0-4e9a-88b2-f6fae02221f2</TravellerId>
<DateOfBirth>2016-04-13T11:56:02.4407937+02:00</DateOfBirth>
<Gender>sample string 3</Gender>
<FirstName>sample string 4</FirstName>
<LastName>sample string 5</LastName>
<CountryCode>sample string 6</CountryCode>
<PrefferedLanguageCode>sample string 7</PrefferedLanguageCode>
<Communication>
<CommunicationId>fbf1eeda-73bf-4381-a751-5a2da346e7a0</CommunicationId>
<Email>
<EmailId>45069245-c2af-4c55-934f-e033da0fbb5e</EmailId>
<Value>sample string 2</Value>
<Culture>sample string 3</Culture>
</Email>
<Sms>
<SmsId>261db3a9-d858-47e9-934b-07981d203155</SmsId>
<Value>sample string 2</Value>
<Culture>sample string 3</Culture>
</Sms>
<EmailId>6a4005d4-8f05-4999-9098-1078b2c12ebf</EmailId>
<SmsId>d5d8f3df-b08c-4954-9e6c-b29a3a74a3e8</SmsId>
</Communication>
<BookingId>4baf0cad-75d8-4067-a3d1-bd70f1b219ad</BookingId>
</Traveller>
</Travellers>
</Booking>
</UpdateBookingRequest>
変更されたルートxmlのため、XMLのシリアル化は失敗します。
UpdateBookingRequestのような別のモデルを追加できますか?
サンプルコード:
// PUT: api/CreateBookingRequests/5
[Route("update/{id:guid}")]
[ResponseType(typeof(void))]
public IHttpActionResult PutCreateBookingRequest(Guid id, CreateBookingRequest createBookingRequest)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != createBookingRequest.ID)
{
return BadRequest();
}
db.Entry(createBookingRequest).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!CreateBookingRequestExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
あなたが行ったことをよりよく理解し、他の人があなたの問題を再現して解決策を提供できるようにするコードを表示できますか? – Nkosi
こんにちは、もっと情報を追加しました。ありがとう – Heisa
xmlを処理するメソッドのサンプルコードを表示します。あなたの問題が何であるかははっきりしていません。 – Nkosi