</div>
</div>
</div>
<hr class="my12 outline-none baw0 bb bc-powder-2">
<div class="grid fw-nowrap fc-black-600">
<div class="grid--cell mr8">
<svg aria-hidden="true" class="svg-icon iconLightbulb" width="18" height="18" viewbox="0 0 18 18"><path d="M9.5.5a.5.5 0 0 0-1 0v.25a.5.5 0 0 0 1 0V.5zm5.6 2.1a.5.5 0 0 0-.7-.7l-.25.25a.5.5 0 0 0 .7.7l.25-.25zM1 7.5c0-.28.22-.5.5-.5H2a.5.5 0 0 1 0 1h-.5a.5.5 0 0 1-.5-.5zm14.5 0c0-.28.22-.5.5-.5h.5a.5.5 0 0 1 0 1H16a.5.5 0 0 1-.5-.5zM2.9 1.9c.2-.2.5-.2.7 0l.25.25a.5.5 0 1 1-.7.7L2.9 2.6a.5.5 0 0 1 0-.7z" fill-opacity=".4"></path><path opacity=".4" d="M7 16h4v1a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1v-1z" fill="#3F3F3F"></path><path d="M15 8a6 6 0 0 1-3.5 5.46V14a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1v-.54A6 6 0 1 1 15 8zm-4.15-3.85a.5.5 0 0 0-.7.7l2 2a.5.5 0 0 0 .7-.7l-2-2z" fill="#FFC166"></path></svg>
</div>
<div class="grid--cell lh-md">
<p class="mb0">
<b>Want to improve this question?</b> <a href="/posts/42651652/edit">Update the question</a> so it's <a href="/help/on-topic">on-topic</a> for Stack Overflow.
</p>
<p class="mb0 mt6">Closed <span title="2017-03-07 16:42:17Z" class="relativetime">3 years ago</span>.</p>
</div>
</div>
</aside>
I'm new to MVC and writing a web app on MVC. I'm trying to send a get request.
I've got a razor page from which I'm trying to send a request:
$(document).ready(function () {
var query = $('#productQuery').val();
alert("Start.");
var uri = 'api/search/products?q=abc';
$.get(uri, function (data) {
alert("Load was performed.");
});
});
Besides I've got a controller linked to the page which works absolutely fine, and this 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();
}
I would be grateful if anyone could tell me what I'm doing wrong and why my get request not sent.
</div>
var uri = 'api/search.products?q=abc';
it has the issue it should be
var uri = 'api/search/products?q=abc';
In JavaScript code you should use @Url.Action to build correct path as follows:
$(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.");
});
});
When you are new to Web API, you need to debug in both client and server.
Good practice is to use default route first before using route attributes.
public class SearchProductsController : ApiController
{
[HttpGet]
public async Task<IEnumerable<string>> Get([FromUri(Name = "q")] string query)
{
return new[] {"value1-" + query, "value2-" + query};
}
}
Testing URL: http://localhost:xxxx/Api/SearchProducts?q=abc
If you can get the API working, you can go back to client side.
$(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
If you want to send array, you want to use HttpPost instead of HttpGet.