На вызов MVC Web Api от Ajax отвечает 404 - PullRequest
0 голосов
/ 31 мая 2018

Я знаю, что об этом спрашивали десятки раз, но я действительно расстроен, так как ни одно из предложений, которые я могу найти, не работает для меня, и я действительно застрял.

Моя проблема в том, что яя не могу вызвать Web Api из ajax, независимо от того, какие конфигурации / комбинации / любые маршруты и все, что я пробую, ни один из них не работает, и я просто получаю 404.

Это мой файл Global.asax:

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }

Это мой WebApiConfig.cs в папке App_Start:

public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        // Web API routes
        config.MapHttpAttributeRoutes();

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

Это мой класс UserController:

public class UserController : ApiController
{
    public IHttpActionResult GetUserDataById(string id)
    {
        Clients jsonData = Http.downloadJsonData<Clients>(InsuranceGlobal.clientsUrl);
        Client user = jsonData.clients.Where(u => u.id == id).FirstOrDefault();

        return Ok(user);
    }
}

Это мой Ajax-вызов внутри cshtmljavascript section:

$("#btnGetUserById").click(function () {
        $('#userByName').empty();
        $("#gettingByIdMsg").text(" Getting User...");
        $.ajax({
            url: '../api/User',
            type: "GET",
            contentType: "application/json",
            dataType: "json",
            data: { id: $("#userId").val() },
            success: function (data) {
                $('<tr>', { html: formatItem(data) }).appendTo($('#userByName'));
                $("#usersTable").removeClass("hidden");
                $("#gettingByIdMsg").text("");
            },
            fail: function (jqXHR, textStatus) {
                $("#gettingByIdMsg").text("Request failed: " + textStatus);
            }
        });
    });

Я попробовал GET, а также POST с декоратором [HttpPost] безрезультатно.

Я думаю, у меня установлены все необходимые пакеты Web Api NuGet, и приложение компилируетсябез ошибок, но веб-API не вызывается.

Пожалуйста, помогите.

Редактировать 1:

enter image description here

IДолжен отметить, что - по назначению - я не начал новый проект с шаблоном WebApiВ Visual Studio вместо этого я запустил проект MVC, а затем установил все необходимые пакеты и конфигурацию NuGet WebApi (возможно, я что-то пропустил, не знаю).

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Хорошо, после решения моей проблемы я отвечу на свой собственный вопрос.

Прежде всего я должен сказать спасибо за все ответы.Люблю это сообщество, и люди здесь очень милые.

После погружения в морские глубины ... ошибиться в конфигурации моего решения и много с ним бороться, я вспомнил, что ранее установил пакет WebApi.Owin и просто попробовалЯ решил удалить его, оставив только AspNet.WebApi и voilá, теперь звонки через WebApi работают.

Я надеюсь, что все эти усилия помогут кому-либо еще, у которого возникнет подобная проблема в будущем.

0 голосов
/ 31 мая 2018

Изменить EDIT: на основе комментария

[RoutePrefix("api/User")]
public class UserController : ApiController
{
    [Route("getbyid/{id}")]
    public IHttpActionResult GetUserDataById(string id)
    {
        Clients jsonData = Http.downloadJsonData<Clients> InsuranceGlobal.clientsUrl);
        Client user = jsonData.clients.Where(u => u.id == 
id).FirstOrDefault();

        return Ok(user);
    }
}

и клиента на

$("#btnGetUserById").click(function () {
        $('#userByName').empty();
        $("#gettingByIdMsg").text(" Getting User...");
        $.ajax({
            url: '/api/User/getbyid/' + id: $("#userId").val(),
            type: "GET",
            success: function (data) {
                $('<tr>', { html: formatItem(data) }).appendTo($('#userByName'));
                $("#usersTable").removeClass("hidden");
                $("#gettingByIdMsg").text("");
            },
            fail: function (jqXHR, textStatus) {
                $("#gettingByIdMsg").text("Request failed: " + textStatus);
            }
        });
    });
...