ASP.NET Web API - GET HTTP Verb не поддерживается (405) при попытке передать параметр - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь вызвать мой веб-API с помощью запроса getJSON:

var uri = 'api/comment';
var id = solicitorId;

$.getJSON(uri, id, (function (data) {
    $('#commentTableContainer').html(data);
}));

И это метод в классе контроллера комментария:

public string GetComment(int id)
{
    //Do things
}

Я использую значение по умолчаниюмаршрутизация:

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { action = "Index", id = UrlParameter.Optional }
            );

Однако при попытке вызвать API с помощью getJSON я получаю ошибку 405:

HTTP405: BAD METHOD - The HTTP verb used is not supported.
(XHR)GET - http://localhost:<port>/api/comment?334203

Запрос GET работает, если я удаляю параметр id из GetCommentподпись, т.е. GetComment()

Я не слишком много знаю об этом материале WebAPI - я в основном следовал руководству от Microsoft, здесь здесь (docs.microsoft.com)

Если у кого-то есть идеи, я был бы благодарен.Я рассмотрел много SO вопросов по этому вопросу, но ни один из них не помог.

Я попытался добавить [HTTPGet] в метод CommentController GetComment(int id), а также указать маршрут с помощью [Route], но яЯ никуда не денусь.

Любая помощь будет высоко ценится.Спасибо.

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

прежде всего измените файл WebApiConfig и отредактируйте маршрут по умолчанию, как показано ниже.

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

Когда вы изменяете шаблон маршрута и добавляете параметр "{action}", это означает, что вы должны добавить имя действия, когда хотитевызвать действие

и после этого вы можете вызвать функцию, как показано ниже url

var uri = 'http://localhost:<port>/api/comment/GetComment/'+id;

Надеюсь, это поможет вам

0 голосов
/ 14 сентября 2018

Просто попробуйте URL-адрес в браузере = http://localhost:/api/comment/GetComment?334203. Возможно, вам не хватает имени метода в URL.

Кроме того, webApi.Config используется для веб-API.Дайте мне знать, если это не сработает.

0 голосов
/ 14 сентября 2018

и большое спасибо за помощь.Я исправил это сейчас.Я действительно не знаю точно, как описать это, но я изменил свой $.getJSON вызов на это:

var uri = 'api/comment/' + id;
$.getJSON(uri, (function (data) {
    //immaterial things
}

И мой метод CommentController вернулся к public string GetComment(int id) без [Route] или [HTTPGet]

И теперь это работает.Я полностью думал, что пробовал это раньше, но нет.Я не смог бы исправить это без чьих-либо советов, так что большое спасибо и хороших выходных!

0 голосов
/ 14 сентября 2018

Ваша конфигурация маршрута может не соответствовать вашему URL.

Конфигурация маршрута: url: "{controller}/{action}/{id}"

URL запроса: /api/comment?334203

вы можете попытаться добавить атрибут Route для установки RouteAttribute для вашего действия API.

[Route("api/comment/{id}")]
[HttpGet]
public string GetComment(int id)
{
    //Do things
}

и вам нужно использовать полный URL в вашем запросе ajax.

var uri = 'http://localhost:<port>/api/comment/GetComment';

, который может соответствовать вашему маршруту.

...