2017-03-07 2 views
0

MVC를 처음 사용하고 MVC에 웹 응용 프로그램을 작성했습니다. 요청을 보내려고합니다.
는 내가 요청을 보낼 시도하고있는 면도칼 페이지있어 : 내가 절대적으로 잘 작동 페이지에 연결된 컨트롤러를 가지고 외에요청을 보내지 않음

$(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' 매개 변수없이 (또는 매개 변수가 0이고 빌드 업하여) 시도하십시오. –

답변

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'해야 문제가 있습니다; 당신이 웹 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

자바 스크립트 코드에서는 올바른 경로를 구축 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 : 당신은 API의 작업을 얻을 수 있다면http://localhost:xxxx/Api/SearchProducts?q=abc

, 당신은 클라이언트 측에 다시 갈 수 있습니다. 당신이 배열을 보내려면

$(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의 사용하려고합니다.

관련 문제