2017-03-07 119 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."); 
}); 
});