2017-05-08 8 views
0

APIを介して呼び出されるサーバー側ロジックを移動しています。私はAJAXコールから打撃を受けることができません。私のコードに何が間違っているのか、コントローラでアクションが見つからないというエラーが表示されるのはなぜですか?AJAXポストリクエストからAPIコントローラのアクションを実行できません

コントローラアクション

[System.Web.Http.HttpPost]  
public HttpResponseMessage assignViews(string selectedViews, string volIds) 
{ 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 

AJAXリクエストルートRに

self.saveViews = function() { 

     var data = { 
      selectedViews: self.selectedViews().toString(), 
      volIds: populateSelectedVolIds().toString() 
     }; 

     var jsonData = ko.toJSON(data); 

     $.ajax({ 
      url: "../../ja/ClientView/assignViews", 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      cache: false, 
      data: jsonData, 
      success: handleViewsForClientSuccess, 
      error: handleEditViewsErrors 
     }); 
};   

ルーティング

+0

:たとえば、あなたは、コード内でこのモデルを作成:

public class MyModel { public string selectedViews { get; set; } public string volIds { get; set; } } 

をそして、このようなあなたの行動を変えますassignViews(アクション名)はルーティングの一部ではないため、含めません。 [2]パラメータとして文字列の代わりにモデルを使用することをお勧めします。モデルを使用すると、バインディングが正しく機能します。もう一つのオプションは[FromBody]属性を使うことです。 –

+0

アクション名をオフにしても機能しませんでした。私はモデルオブジェクトを作成し、それをパラメータとして設定しようとしています。うまくいけばうまくいきます。 –

+0

魅力的なモデルを作成する。私はそれを受け入れることができるようにこれを答えてください。ご協力いただきありがとうございます! –

答えて

0

[1]それはあなたのルーティングの一部ではないので、あなたのURLでアクション名を含めないでくださいURL

からアクション名を削除します。この動詞でアクションをマークし、あなたのajaxリクエストがPOSTリクエストであるため、HTTP動詞POSTはアクションを検出します。あなたのURLは次のようになります。

url: "../../ja/ClientView"

[2]パラメータ

ベストプラクティスとしてモデルを使用して、あなたの行動のためのパラメータとして文字列の代わりにモデルを使用することです。 [1]あなたのURLは「../../ja/ClientView」そうドンである必要があり

[System.Web.Http.HttpPost] 
public HttpResponseMessage assignViews(MyModel data) 
{ 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 
0
public override void RegisterArea(AreaRegistrationContext context) 
    {   
     RouteTable.Routes.MapHttpRoute(
      "ja", 
      "ja/{controller}/{id}", 
      new { action = "Index", id = UrlParameter.Optional, version = UrlParameter.Optional } 
     ); 
    } 

Action Placeholderを追加するのには欠けていますが、デフォルトでは "Index"としてマークしました。これは、あなたのajaxコールがActionMethod "Index"とマッチすることを意味します。それを変更しようとすると、パラメータの不一致が考えられます。

+0

"メッセージ": "http:// localhost:8088/ja/ClientView/assignViews 'というリクエストURIに一致するHTTPリソースが見つかりませんでした。"、 "MessageDetail": "コントローラ' ClientView 'でアクションが見つかりませんでした要求と一致します。 –

+0

^^^^まだこのエラーを取得しています –

+0

@DeanFriedland - 完全なコントローラコードを追加することができれば助かります – Gururaj

関連する問題