2017-03-07 18 views
0

私はMVCを初めて使い、MVCにウェブアプリケーションを書いています。私は取得リクエストを送信しようとしています。
私がリクエストを送信しようとしているから、かみそりのページ持っている:リクエストを送信しない

:私は絶対に正常に動作しますページにリンクされているコントローラ、およびこのApiControllerを持っているだけでなく

$(document).ready(function() { 
    var query = $('#productQuery').val(); 
    alert("Start."); 
    var uri = 'api/search/products?q=abc'; 
    $.get(uri, function (data) { 
      alert("Load was performed."); 
    }); 
}); 

[RoutePrefix("api/search")] 
public class SearchController : ApiController 
{ 
    [Route("products")] 
    [HttpGet] 
    public async Task<IEnumerable<ProductDocument>> searchProducts(
     [FromUri(Name = "q")]string query, 
     [FromUri(Name = "cat")]string[] categories=null) 
    { 
     ProductsResponse response = await SolrWebApi.QueryAsync<ProductsResponse>(query); 
     if (response.Header.Status != 0) 
     { 
      throw new HttpResponseException(HttpStatusCode.InternalServerError); 
     } 
     return response.Body.Documents.Take(3).ToArray(); 
    } 

誰かが私が間違っていることを教えてもらえれば幸いであり、なぜ私の取得リクエストは送信されないのでしょうか?

+0

あなたのuriは、ルーティング属性を与えられた 'api/search/products'でなければなりません。 '@ Url.Action'を調べると、ルートをハードコードするのではなく、コントローラ+アクション経由でURLを取得することができます。それでも動作しない場合は、 'categories'パラメータなしで(またはパラメータをゼロにしてビルドして)試してください。 –

答えて

1

次のように

+0

私は単純なmvcコントローラであるSearchProductsControllerを持っています そしてApiControllerであるSearchController uriはapi/Search?q = abcのように見えますか? – AOY

+0

***コントローラ***名は***名詞***、*** *** ***メソッド名は***動詞***でなければなりません。一般的な命名規則に従ってください。データベースまたはサードパーティのAPIからデータを返す前に、静的な値でAPIとクライアント側の両方を処理します。 – Win

0

var uri = 'api/search.products?q = abc';

それは

のvarのuri = '?API /検索/製品Q = ABC' であるべき問題があります。あなたは、Web APIに新しく追加されたとき、あなたは、クライアントとサーバの両方でデバッグする必要がある

$(document).ready(function() { 
var query = $('#productQuery').val(); 
alert("Start."); 
var uri = '@Url.Action("searchProducts","SearchController")' + '?q=abc'; 
$.get(uri, function (data) { 
     alert("Load was performed."); 
}); 
}); 
0

JavaScriptコードでは、正しいパスを構築するためにUrl.Action @使用する必要があります。

ルートアトリビュートを使用する前に、デフォルトルートを最初に使用することをお勧めします。

public class SearchProductsController : ApiController 
{ 
    [HttpGet] 
    public async Task<IEnumerable<string>> Get([FromUri(Name = "q")] string query) 
    { 
     return new[] {"value1-" + query, "value2-" + query}; 
    } 
} 

テストURL:http://localhost:xxxx/Api/SearchProducts?q=abc

あなたはAPIの作業を取得することができた場合、あなたが戻って、クライアント側に行くことができます。

$(document).ready(function() { 
    var query = $('#productQuery').val(); 
    alert("Start."); 
    var uri = 'api/SearchProducts?q=abc'; 
    $.get(uri, function (data) { 
     alert("Load was performed."); 
    }); 
}); 

[FromUri(Name = "cat")]string[] categories=nullあなたは配列を送信したい場合は、代わりにHTTPGETHttpPostを使用します。

関連する問題