1

WebApiコントローラを作成する必要があります。タスクは、通常のMVCコントローラからWebApiコントローラに移行することです。WebApiコントローラにモデルを渡すには?

  • デザインパターン - - リポジトリ+ UOW、工場+ NUnitの
  • 依存性注入
  • SOLID
:このプロジェクトで

は、プログラミングのほぼすべての美しさを同じように使用されます

これはMyApp.Domain層での私のモデルである

public class Customer 
{ 
    //please note that we are using Repository pattern & so no Data Annotations like Required, Key are not used here. 
    public int CustomerID { get; set;} 

    public string CustomerName { get; set;} 

    public string EmailAddress { get; set;} 
    // & so on 
} 
層で

は、サービス層とモデルを渡す検証&ためのビューモデルが存在します。これは私のMVCコントローラの外観です

public class CustomerVM 
    { 
    [Required] 
    public int CustomerID { get; set;} // & so on the other properties. 

    } 


    public ActionResult Registration(Customer VM) 
    { 
     if(Modelstate.IsValid) 
     { 
      //call service layer 
     } 
     else 
     { 

     } 
    } 

このコントローラをWebApiコントローラにマイグレートすることです。 今後、私は別のプロジェクトを作成しました。MyApp.WebApi

このWebApiコントローラにモデルを渡すべきかどうか疑いがあります。

私は、UI層& WEBAPI層でDLLをMyApp.ViewModelsとして プロジェクトを分離し、この層に &の参照をすべてのviewmodelsを置くためにUI層からのViewModelを切り離すために考えています。

public string POST([FromBody]CustomerVM customer) 
{ 
    if(Modelstate.IsValid) 
    { 
     //call the other service layer which will take care of DB handling 
     return "Success"; 
    } 
    else 
    { 
     return "Error"; 
    } 
} 

これは、これを行うには、他の正しい方法を&行うには正しい方法です?? RESTfulなAPIで

+0

これを行うと問題はありません。 –

+0

@ YashveerSingh、これであなたは確かですか? –

+0

これは私が何を理解した場合。既存のMVCプロジェクトをWebApiに変換します。したがって、VCプロジェクトで使用していたように、既存のビューモデルを使用することができます。web apiはmvcのようにモデルバインドを実行できます。 –

答えて

1

、あなたはがのDTOまたはWeb APIのスラングであるビューモデルと呼んで、彼らはモデルです。

あなたは、ASP.NET MVCとWebAPIの両方が同様のアーキテクチャを持っており、ASP.NET MVCのコアに、彼らは、単一のプログラミングモデルにマージしてきたことを知っています。つまり、ASP.NET MVCで有効だったものはWebAPIでも有効です。

[FromBody]属性が不要であることを確認します。 モデルは、ボディから自動的にバインドされます。

+0

私のアプローチは正しいと私はあなたのポストを取るべきですか? –

+0

@ Kgn-web確かに。それは正しいと思われ、他の詳細はSE.CodeReviewにもっと適しているかもしれません。あなたの実際のコードがソフトウェアレイヤーの面だけでなく、妥当であることを検証したい場合は... –

1

文字列の代わりにIHttpActionResultを使用して、実際のエラーをスローすることもできます。

public IHttpActionResult POST([FromBody] CustomerVM customer) 
{ 
    if (!ModelState.IsValid) { 
     return BadRequest(ModelState); 
    } 
    return Ok("success"); 

} 
+0

私はあなたが別のサーバー上のAPIについて何か言ったことに気付きました。あなたはAJAX経由でそれを呼び出すつもりです有効にすることを検討する。 https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api –

+0

はい、CORSを有効にしてからドメインを追加します。あなたの入力に感謝します:) –

関連する問題