2017-09-16 28 views
0

私はC#で書かれたWeb APIにリクエストを送信するためにAjaxで作業しています。 私はviewmodelを送信していますが、不正なリクエストエラーが表示されます。これが私のviewmodelあるAjax mvc api:viewmodelを送信するときのリクエストが不適切

[HttpPut] 
/*api controller*/ 
public IHttpActionResult UpdateCursoProfesor(int CourseId, CourseViewModel ViewModel) 
{ 
/*Do something*/ 
return Ok(result); 
} 

: は、これは私のコードです

public class CursoViewModel 
{ 
[MaxLength(125)] 
public string Tittle{ get; set; } 
public string Description { get; set; } 
} 

そして、私はAjaxのリクエストで "データ" を含まない場合は、これは私のAJAX

function GeneralPost(CursoDto) { 

      $.ajax({ 
       async: true, 
       url: "http://localhost:59245/api/ProfesorCurso?CourseId=123", 
       type: "Put", 
       dataType:'json', 
       data: JSON.stringify({ 

        Tittle: 'My tittle', 
        Description: 'I am describing yea' 
       }), 
       success: function (data) { 
        alert ('we did it!') 
       }, 
       error: function (msg) { alert('bad bad'); } 
      }); 
     } 

です私のAPIコントローラに到達することはできますが、データを含めると例外があります。 http://localhost:59245/api/ProfesorCurso?CourseId=400不良リクエスト

私が間違っていることについてのヒントはありますか?ありがとう

+0

がリクエストヘッダをチェックし、特別のContent-Typeを。ヘッダーがコンテンツ形式と一致しない場合、Bad Requestが返されることがよくあります。 – Jasen

答えて

0

このCourseIdのパラメータタイプはGuidです。アクションリンクCourseIdパラメータはGuid "http://localhost:59245/api/ProfesorCurso?CourseId=123",

は全部が

まず間違って見えますview

public IHttpActionResult UpdateCursoProfesor(int CourseId, CourseViewModel ViewModel) 
{ 
/*Do something*/ 
return Ok(result); 
} 
+0

こんにちは、ありがとう。私があなたが言及したように変更しましたが、エラーはまだそこにあります。データを含めるとapiコントローラにリクエストが渡されますが、ApiのViewmodelオブジェクトは空です。しかし、私がデータをインクルードするときに、明確化のために400エラー –

0

controllerActionResultメソッドパラメータtypeintまたは送信正しいGuid値をしないで、URLが含まれている必要がありますあなたが明らかにあなたがしていないRESTプリオンシップスに従わない限り、コントローラとアクション。

あなたのコントローラは、その後、あなたのURLは次のようなものでなければなりませんProfesorCursoControllerと呼ばれていると仮定すると:あなたはPUTリクエストを発行するので、あなたのデータは、要求の本体ではないにしてください、今

http://localhost:59245/api/ProfesorCurso/UpdateCursoProfesor

URL。

私はViewModelにcourseIDも含めて、TittleとDescriptionと一緒に解析するようにします。

あなたのコントローラは次のようになります:

[HttpPut] 
/*api controller*/ 
public IHttpActionResult UpdateCursoProfesor([FromBody] CourseViewModel ViewModel) 
{ 
/*Do something*/ 
return Ok(result); 
} 

あなたのjavascript:

function GeneralPost(CursoDto) { 

      $.ajax({ 
       async: true, 
       url: "http://localhost:59245/api/ProfesorCurso/UpdateCursoProfesor", 
       type: "PUT", 
       dataType:'json', 
       data: JSON.stringify({ 
        CourseID : some GUID not int! 
        Tittle: 'My tittle', 
        Description: 'I am describing yea' 
       }), 
       success: function (data) { 
        alert ('we did it!') 
       }, 
       error: function (msg) { alert('bad bad'); } 
      }); 
     } 

と最終的にあなたのViewModel:

public class CourseViewModel 
{ 
    public Guid CourseID { get;set; } 
    public string Tittle { get;set; } 
    public string Description { get;set; } 
} 
+0

ありがとうございます。残念ながら、私はデータを含まない場合、同じ問題に到着します:json .....、putリクエストはコントローラを通過し、 viewmodelオブジェクトのパラメータは空です。しかし、私はこのaproachを使用すると、私は悪い要求のエラーがあり、警告を取得する "悪いバッド" –

関連する問題