2017-03-07 120 views
0

我是MVC的新手,並在MVC上編寫Web應用程序。我正在嘗試發送獲取請求。
我得從我試圖發送一個請求剃刀頁:獲取請求未發送

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

而且我有鏈接到其工作絕對沒問題的頁面控制器,這ApiController:

[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

如果你是新來的Web API,你需要在客戶端和服務器進行調試。

好的做法是先使用默認路由,然後再使用路由屬性。

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

測試網址: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如果你想發送陣列,您要使用的HttpPost代替HTTPGET

+0

我有SearchProductsController,它只是一個簡單的mvc控制器 而ApiController的搜索控制器 所以應該看起來像api/Search?q = abc? – AOY

+0

***控制器***名稱應該是***名詞***,而***動作***方法名稱應該是***動詞***。請遵循一般命名約定。在從數據庫或第三方API返回數據之前,使用靜態值同時處理API和客戶端工作。 – Win

0

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

它應該是

變種的uri = 'API /搜索/產品Q = ABC?' 的問題;

0

在JavaScript代碼,你應該使用@ Url.Action建立正確的路徑,如下所示:

$(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."); 
}); 
});