У меня есть апи контроллер с этим действием:Asp Web Api асинхронное действие - 404 ошибки
public class ProxyController : ApiController {
public async Task<HttpResponseMessage> PostActionAsync(string confirmKey)
{
return await Task<HttpResponseMessage>.Factory.StartNew(() =>
{
var result = GetSomeResult(confirmKey);
return Request.CreateResponse(HttpStatusCode.Created, result);
});
}
}
А вот мой confuguration апите маршрутизации:
routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional });
Когда я пытаюсь сделать любого Post/Get Requests для этого действия, он возвращает ошибку «404». Как я могу это исправить? Все остальные неасинхронные действия в этом контроллере работают нормально.
UPD. JS запрос:
$.ajax({
url: Url + '/api/Proxy/PostActionAsync',
type: 'POST',
data: { confirmKey: that.confirmKey },
dataType: 'json',
xhrFields: { withCredentials: true },
success: function (data) {
............
},
error: function (jqXHR, textStatus, errorThrown) {
............
}
});
UPD. Решено путем добавления [FromBody]
к моим параметрам в методе действия так же, как в ответ Дж Стина, теперь выглядят как
public class ProxyController : ApiController {
public async Task<HttpResponseMessage> PostActionAsync([FromBody]string confirmKey)
{
var someModel = new SomeResultModel(User.Identity.Name);
await Task.Factory.StartNew(() => someModel.PrepareModel(confirmKey));
return Request.CreateResponse(HttpStatusCode.OK, someModel);
}
}
И это работает!
Также введите имя метода ActionResult и имя контроллера. Если возможно, ваш асинхронный вызов JQuery тоже., :) – RajeshKdev
добавил все необходимое –
@IgorKonopko: попробуйте отметить действие с помощью '[HttpPost]' – Catalin